非官方题解 | 欢乐赛#45
2025-04-14 18:54:10
发布于:广东
欢乐赛#45题解来咯!!
前言
第二次写题解,给个周边吧!
本次欢乐赛整体难度较为简单,评级如下:
| 题号 | 名称 | 难度 | 
|---|---|---|
| T1 | 算式输出 | 入门 | 
| T2 | 最后期限 | 入门 | 
| T3 | 球体体积 | 入门 | 
| T4 | 分数查询 | 入门 | 
| T5 | 奖品分发 | 入门 | 
| T6 | 方阵排列 | 普及- | 
题目解析
知识点:输入输出
题目大意:输出算式“2025*410=x”, 其中整数 x 表示算式的实际结果。
分析与解:签到题,直接输出就好(作者没看清题目就开始写,直接输出了结果,多了一次提交次数···)
赛时代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
    cout<<"2025*410=830250"<<endl;
    return 0;
}
知识点:分支结构
题目大意:给出三个数表示小明洗漱,吃早餐,从家到达学校的时间,学校8点15上课,但他想要预留五分钟时间,输出最晚在什么时候起床。
分析与解:先求出三个数的总和,即所有方面的时间总和,随后通过判断得出时间(看代码就懂了)。
赛时代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    int sum=(a+b+c)/60;//整小时数
    int num=a+b+c-sum*60;//零碎分钟数
    if(num<=10) cout<<8-sum<<" "<<10-num;//分钟<=10
    else cout<<7-sum<<" "<<70-num;//分钟>10,需少一个小时(类似于退位)
    return 0;
}
知识点:格式化输入输出
题目大意:给出球体半径r,求球体体积。
分析与解:直接计算并输出,注意保留四位小数(题目中写误差不超过10的-4次方)。
赛时代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int r;
    cin>>r;
    double ans=4*1.0/3*3.1415926*r*r*r;
    printf("%.4lf",ans);
    return 0;
}
知识点:结构体
题目大意:输入n个同学的名字和三科分数,随后有q次查询,每次输入一个同学的名字,输出他的三科分数。
分析与解:结构体模板题,对于每次询问,遍历n个同学,找到对应的同学名字并输出。
赛时代码
#include<bits/stdc++.h>
using namespace std;
struct node{
    string s;
    int x,y,z;
}a[105];
int main()
{
    int n,q;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].s>>a[i].x>>a[i].y>>a[i].z;
    }
    cin>>q;
    for(int i=1;i<=q;i++)
    {
        string t;
        cin>>t;
        for(int j=1;j<=n;j++)
        {
            if(a[j].s==t) cout<<a[j].x<<" "<<a[j].y<<" "<<a[j].z<<endl;
        }
    }
    return 0;
}
知识点:结构体,sort排序
题目大意:输入n行,每行为一个同学的学号,总分与是否进步(0或1),然后按以下规则排序:
- 有进步的同学先发,没进步的同学后发。
 - 每一类中总分较高的同学先发。
 - 若都相同,则学号小的同学先发。
 
输出排好序后的同学学号。
分析与解:又是一道结构体的题,写一个cmp排序即可。
赛时代码
#include<bits/stdc++.h>
using namespace std;
struct node{
    int num,x,y;
}a[505];
bool cmp(node a,node b)
{
    if(a.y!=b.y) return a.y>b.y;
    else if(a.x!=b.x) return a.x>b.x;
    else return a.num<b.num;
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].num>>a[i].x>>a[i].y;
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++) cout<<a[i].num<<endl;
    return 0;
}
知识点:二维数组
题目大意:输入一个n,构建一个 n*n 的二维矩阵,从左上角开始,第奇数圈按顺时针顺序,第偶数圈按逆时针顺序编号,每次+1(初始为1),输出这个二维矩阵。
分析与解:见图。

赛时代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a[105][105];
    cin>>n;
    int sum=0;
	int ceng=1;
	for(int k=1;k<=n/2;k++)
	{
		if(ceng%2==0)
		{
			for(int i=ceng;i<=n-ceng;i++) a[i][ceng]=++sum;
			for(int i=ceng;i<=n-ceng;i++) a[n-ceng+1][i]=++sum;
			for(int i=n-ceng+1;i>=ceng+1;i--) a[i][n-ceng+1]=++sum;
			for(int i=n-ceng+1;i>=ceng+1;i--) a[ceng][i]=++sum;
		}
		else
		{
			for(int i=ceng;i<=n-ceng;i++) a[ceng][i]=++sum;
			for(int i=ceng;i<=n-ceng;i++) a[i][n-ceng+1]=++sum;
			for(int i=n-ceng+1;i>=ceng+1;i--) a[n-ceng+1][i]=++sum;
			for(int i=n-ceng+1;i>=ceng+1;i--) a[i][ceng]=++sum;
		}
		ceng++;
	} 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
    return 0;
}
啊!!终于写完了——给个周边吧!!
全部评论 8
顶
2025-04-15 来自 广东
1顶
2025-04-15 来自 广东
1顶
2025-04-15 来自 广东
1ding
2025-04-14 来自 广东
1ding
2025-04-14 来自 广东
1dIng
2025-04-14 来自 广东
1给个周边吧!!
2025-04-14 来自 广东
1顶
2025-04-14 来自 广东
1










有帮助,赞一个