非官方全题解|欢乐赛#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君给个精选吧,呜呜呜,写这个全题解被家长骂了呜呜呜,球球了
全部评论 34
ddd
9小时前 来自 江苏
0ddd
9小时前 来自 江苏
0ddd
9小时前 来自 江苏
0ddd
昨天 来自 江苏
0ddd
昨天 来自 江苏
0ddd
昨天 来自 江苏
0ddd
5天前 来自 江苏
0ddd
5天前 来自 江苏
0ddd
5天前 来自 江苏
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;
}
6天前 来自 广东
0谢谢哈
6天前 来自 江苏
0
可以写成
6天前 来自 广东
0谢谢大佬
6天前 来自 江苏
0
1周前 来自 浙江
0球球了
1周前 来自 江苏
0你写题解也被骂啊
1周前 来自 江苏
0我也被骂,然后拿着那几个盲盒我妈就不吱声了
1周前 来自 江苏
0对呀
1周前 来自 江苏
0
ddd
1周前 来自 江苏
0ddd
1周前 来自 江苏
0ddd
1周前 来自 江苏
0ddd
1周前 来自 江苏
0ddd
1周前 来自 江苏
0ddd
1周前 来自 江苏
0dddd
1周前 来自 江苏
0
有帮助,赞一个