非官方全题解|欢乐赛#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 来自 上海
1
2025-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 来自 江苏
0



















2025-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























有帮助,赞一个