# 官方题解 | 欢乐赛#63 题解
2025-12-24 08:31:28
发布于:浙江
官方题解 | 欢乐赛#63 题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
| 题目编号 | 题目名称 | 题目难度 |
|---|---|---|
| T1 | 皓仔的圣诞树 | 入门 |
| T2 | 皓仔的活动安排 | 入门 |
| T3 | 皓仔的温度计算 | 入门 |
| T4 | 皓仔的巨大作物 | 入门 |
| T5 | 皓仔的宝石项链 | 普及- |
| T6 | 皓仔的进制转换 | 普及- |
T1 皓仔的圣诞树
题目大意
按照题目样例输出,输出一个圣诞树的图形。
题解思路
将圣诞树每一行分别输出,并且一行结束之后记得输出换行,就可以得到这个图形。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<" *"<<endl;
cout<<" ***"<<endl;
cout<<"*****"<<endl;
cout<<" *"<<endl;
cout<<" *"<<endl;
return 0;
}
T2 皓仔的活动安排
题目大意
当外界噪音超过 分贝的情况下, 皓仔决定外出去图书馆待一天学习文化课。
当外界噪音超过 分贝,但是不超过 分贝的情况下, 他会在家里进行训练。
如果噪音小于等于 分贝,这安静的令人犯困, 皓仔决定上床睡一觉。
根据输入的数据输出皓仔今天的活动安排。
题解思路
多分支结构习题,输入数字之后使用if-else-if 的多分支结构进行严格的三选一,输出皓仔今天的活动安排。
参考代码
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
if(n>60){
cout<<"图书馆";
}
else if(n>40){
cout<<"ACGO";
}
else{
cout<<"劳逸结合";
}
return 0;
}
T3 皓仔的温度计算
题目大意
皓仔的暖气功耗取决于温度:
1.当气温大于 摄氏度的情况,皓仔整天都不开暖气。
2.当气温等于 摄氏度的情况下, 皓仔会 小时打开取暖器,取暖器的基础功耗为 度电每小时。
3.当气温小于 摄氏度的情况下,不仅会 小时打开取暖器,气温每下降一度, 还需要在基础功耗的基础上额外消耗 度电每小时。
帮皓仔计算未来 天的总耗电量。
题解思路
一共有 天, 可以通过循环结构输入每一天的温度然后计算耗电量并且累加求和。
对于每一天输入的温度 , 首先判断温度是否小于等于 , 小于等于 摄氏度的情况下, 首先有 度的基础功耗, 并且在温度低于 摄氏度的情况下, 还需要加上 的额外功耗。
记得最终每天的功耗是一小时的功耗 * , 因为一天 个小时暖气都在运行。
参考代码
#include<bits/stdc++.h>
using namespace std;
int n;
int c[100005];
double a,b,sum;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>c[i];
}
cin>>a>>b;
for(int i=1;i<=n;i++){
if(c[i]<=15){
sum+=a*24+b*(15-c[i])*24;
}
}
printf("%.2lf",sum);
return 0;
}
T4 皓仔的巨大作物
题目大意
一株土豆植株可以产出 个土豆, 现在给定一个二维数组代表一片田地的种植情况。
对于一株植物,只要以该植物为中心的九宫格内, 总的植株数量不超过 个, 那么该植株就可以产出 倍的土豆数量。
请你帮皓仔计算一下他今年能够收获多少个土豆?
题解思路
本题可以直接枚举田地中的每一个土豆,对于当前的土豆,将其所在的九宫格进行一次枚举,得到九宫格内植株得到总数量。
总数量小于等于 , 那么这是一个巨大作物,会得到 个土豆。
否则这是一个普通作物, 只有 个土豆。 将所有的土豆总数累加求和即可得到答案。
参考代码
#include <bits/stdc++.h>
using namespace std;
int a[5010][5010];
int b[5010][5010];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int p=i-1;p<=i+1;p++){
for(int q=j-1;q<=j+1;q++){
b[i][j]=b[i][j]+a[p][q];
}
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]<=2){
ans=ans+a[i][j]*9;
}
else{
ans=ans+a[i][j]*3;
}
}
}
cout<<ans<<endl;
return 0;
}
T5 皓仔的宝石项链
题目大意
给定一个长度为 的数组,一共 次询问,每次在其中选择一段区间 ,问区间内有几种不同的数字。
题解思路
每次查询需要对区间内数字进行去重计数,最简单的去重方法就是直接排序之后进行去重。当数组已经排序之后,相同数字会出现在一起,我们对于每个数字只在其第一次出现时候, 也就是 时进行计数, 最终可以得到去重之后的数字总数结果。
参考代码
#include <bits/stdc++.h>
using namespace std;
int a[5010];
int b[5010];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
int l,r;
cin>>l>>r;
for(int j=l;j<=r;j++){
b[j-l+1]=a[j];
}
sort(b+1,b+r-l+2);
int ans=1;
for(int j=2;j<=r-l+1;j++){
if(b[j]!=b[j-1]){
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
T6 皓仔的进制转换
题目大意
输出三行, 分别输出 数字 的四进制, 八进制, 十六进制。(十六进制中超出 的数字使用大写字母来表示)
题解思路
二进制,八进制,十六进制都是特殊的,因为他们都是 的整数幂: 。
因此一个四进制位可以用两个二进制位来表示, 一个八进制位可以用三个二进制位来表示,一个十六进制位可以用四个二进制位来表示。
因此本题我们只需要按照每 个数字表示一位,在高位需要补上对应的前导零,就可以得到 对应的四进制,八进制,十六进制。
参考代码
#include<bits/stdc++.h>
using namespace std;
void solve(string s, int p) {
int cnt = (p - s.size() % p) % p;
for(int i = 0; i < cnt; i++) s = "0" + s;
for(int i = 0; i < s.size(); i += p) {
int res = 0;
for(int j = 0; j < p; j++) {
res = res * 2 + int(s[i + j] - '0');
}
if(res < 10) cout << res;
else cout << char('A' + (res - 10));
}
cout << endl;
}
int main () {
string s;
cin >> s;
solve(s, 2); //四进制
solve(s, 3);//八进制
solve(s, 4);//十六进制
return 0;
}
这里空空如也







有帮助,赞一个