非官方全题解|欢乐赛#45
2025-04-16 18:39:49
发布于:江苏
Hello大家好呀,今天我来出一期欢乐赛#45地全题解,先吐槽一下,这次的欢乐赛难度感觉可以,处于中等偏下,对我这样的萌新小白非常的有好,在此感谢一下出题人@Sherry
正片开始
T1:算式输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
cout<<"2025*410="<<2025*410;
return 0;
}
没啥可说的,就是注意一下要输出算式"2025*410="
T2:最后期限
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c; //定义三个变量
cin>>a>>b>>c;
int shang=8*60+15; //这里是指上学的时间8:15从0:00算起一共有495分钟
int cnt=a+b+c+5; //这就是洗漱,吃早餐,去学校,以及需要提前的5分钟
int dead=shang-cnt; //deadline就是8:15减去所有的操作时间
int h=dead/60; //这是小时
int m=dead%60; //这是分钟
h%=24; //转成24小时的进率
cout<<h<<" ";
printf("%02d",m); //切记,^...^,这里假如是零的话,就需要格式化输出,在前面添0
return 0;
}
这道题在我第一次做的时候,脑子不知道怎么抽了,用了if……(悲伤的故事
T3:球体体积
#include<bits/stdc++.h>
using namespace std;
int main()
{
double pi=3.1415926,r;
cin>>r;
double v=pow(r,3)*pi*1.3333333;
printf("%.4lf",v);
return 0;
}
这道题没什么难的,就是照着公式代入变量,切记,4/3要变成1.3333333,同等比例(我也不知道怎么叫),其实我的代码有一点点误差,希望各位大佬来分享出您的代码
T4:分数查询
#include<bits/stdc++.h>
using namespace std;
struct fen
{
int chi,mat,eng;
}a[1000]; //定义一个结构体,存分数
int main()
{
int n,q; //两个变量
string name;
cin>>n;
map<string,fen> score; //建立一个map,让结构体和名字有关联
for(int i=0;i<n;i++)
{
int ch,ma,en;
cin>>name>>ch>>ma>>en;
score[name]={ch,ma,en}; //map的name行存入分数
}
cin>>q;
for(int i=0;i<q;i++)
{
string fang;
cin>>fang;
if(score.find(fang)!=score.end()) //判断了一下里面有没有这个名字(其实没有什么事,感谢题目作者的数据样例)
{
fen s=score[fang];
cout<<s.chi<<" "<<s.mat<<" "<<s.eng<<endl;
}
}
return 0;
}
总结:创结构体,创map,放名字和属性,最后寻找
T5:奖品分发
#include<bits/stdc++.h>
using namespace std;
struct stu
{
int id,score,jin;
}a[1000];
bool cmp(stu a,stu b)
{
if(a.jin!=b.jin)
{
return a.jin>b.jin;
}
if(a.score!=b.score)
{
return a.score>b.score;
}
return a.id<b.id;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i].id>>a[i].score>>a[i].jin;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
cout<<a[i].id<<endl;
}
return 0;
}
这道题也很简单,首先定义cmp函数的排列规则,然后排列结构体,最后按照顺序输出
T6:方阵排列
果然啊!!最后一题是最难的(输出一下就没事了)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int ju[n][n];
int num=1;
int shun=1;
for(int i=0;i<(n+1)/2;i++)
{
if(shun==1)
{
for(int j=i;j<n-i;j++)
{
ju[i][j]=num++;
}
for(int j=i+1;j<n-i;j++)
{
ju[j][n-1-i]=num++;
}
for(int j=n-2-i;j>=i;j--)
{
ju[n-1-i][j]=num++;
}
for(int j=n-2-i;j>i;j--)
{
ju[j][i]=num++;
}
}
else
{
for(int j=i;j<n-i;j++)
{
ju[j][i]=num++;
}
for(int j=i+1;j<n-i;j++)
{
ju[n-1-i][j]=num++;
}
for(int j=n-2-i;j>=i;j--)
{
ju[j][n-1-i]=num++;
}
for(int j=n-2-i;j>i;j--)
{
ju[i][j]=num++;
}
}
shun*=-1;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<ju[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
理解吗?看起来大家有可能不太理解,解释一下,两层循环,第一层是用来判断顺逆时针的,二层循环有八个,每个if里面的四个是指按照上下左右来填充的,怎么样,理解了吗?
就这样,这次欢乐赛的全题解就讲到这里,下课,大家再见
PS
@AC君呜呜呜,AC君给个精选吧,呜呜呜,写这个全题解被家长骂了呜呜呜,球球了
全部评论 39
恭喜获得题解奖
2025-04-26 来自 上海
12025-04-26 来自 上海
0Oh yes
2025-04-26 来自 江苏
0白银了
2025-04-26 来自 江苏
0
https://www.acgo.cn/application/1897200450738667520
2025-05-13 来自 浙江
0顶!
2025-05-02 来自 浙江
0小小的打一个广告:加入天马行空吧呜呜呜。。。
现在在比五一劳动节邀请赛,前三名得满级管理员
点我加入
比赛邀请码,JC3K2025-04-29 来自 江苏
02025-04-24 来自 福建
0ddd
2025-04-22 来自 江苏
0ddd
2025-04-22 来自 江苏
0ddd
2025-04-22 来自 江苏
0ddd
2025-04-21 来自 江苏
0ddd
2025-04-21 来自 江苏
0ddd
2025-04-21 来自 江苏
0ddd
2025-04-17 来自 江苏
0ddd
2025-04-17 来自 江苏
0ddd
2025-04-17 来自 江苏
0T4:分数查询:
#include <bits/stdc++.h>
using namespace std;struct Scores {
int chinese;
int math;
int english;
};int main() {
int n;
cin >> n;
map<string, Scores> students;for (int i = 0; i < n; ++i) { string name; int c, m, e; cin >> name >> c >> m >> e; students[name] = {c, m, e}; } int q; cin >> q; for (int i = 0; i < q; ++i) { string query; cin >> query; auto it = students.find(query); cout << it->second.chinese << " " << it->second.math << " " << it->second.english << endl; } return 0;
}
2025-04-16 来自 广东
0谢谢哈
2025-04-16 来自 江苏
0
可以写成
2025-04-16 来自 广东
0谢谢大佬
2025-04-16 来自 江苏
0
2025-04-15 来自 浙江
0球球了
2025-04-15 来自 江苏
0你写题解也被骂啊
2025-04-15 来自 江苏
0我也被骂,然后拿着那几个盲盒我妈就不吱声了
2025-04-15 来自 江苏
0对呀
2025-04-15 来自 江苏
0
ddd
2025-04-15 来自 江苏
0ddd
2025-04-15 来自 江苏
0
有帮助,赞一个