非官方题解 | 欢乐赛#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
顶
1周前 来自 广东
0顶
1周前 来自 广东
0顶
1周前 来自 广东
0ding
2025-04-14 来自 广东
0ding
2025-04-14 来自 广东
0dIng
2025-04-14 来自 广东
0给个周边吧!!
2025-04-14 来自 广东
0顶
2025-04-14 来自 广东
0
有帮助,赞一个