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