语法周赛 Round 7 题解
2024年12月25日大约 3 分钟
A.难or易?
分析
- 难度:简单的条件判断语句
- 子任务 1(30 分):保证了
,直接输出normal
就好。 - 子任务 2(30 分):保证了
是奇数,只需要判断是否小于 就可以知道该输出什么。 - 子任务 3(40 分):基础的条件判断语句,可以用三个分支,也可以嵌套一层。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
if (n < 5)
cout << "normal";
else if (n % 2 == 1)
cout << "easy";
else
cout << "difficult";
return 0;
}
B.好or坏?
分析
- 难度:循环数位分解基础题
- 子任务 1(30 分):保证了
是一个一位数,变成了简单的条件判断的题目,只需要根据是否为 就可以算出具体的数。 - 子任务 2(30 分):保证了
是一个四位数,不需要循环数位分解。直接取个十百千位即可。 - 子任务 3(40 分):在基础的数位分解的循环基础上配合上计数即可。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int cnt3 = 0;
int cntE = 0;
while (n > 0)
{
if (n % 10 == 3)
cnt3++;
else
cntE++;
n /= 10;
}
if (cnt3 > cntE)
cout << "good";
else
cout << "bad";
return 0;
}
C.读or过
分析
- 难度:用字符串存储高精度数并进行操作。
- 子任务 1(30 分):保证了
在int
范围内。只需要按照第二题的做法来循环数位分解即可。 - 子任务 2(30 分):整型没法存储那么大的数,所以需要用字符串存储。这个子任务保证了没有
,只需要判断是否是 的倍数即可。按照提示,如果一个数的所有数位之和为 的倍数,那么它就是 的倍数。所以只需要计算 位的字符串的所有数字字符对应的数字之和是否是 的倍数即可。 - 子任务 3(40 分):在做子任务 2 的基础上,顺带看看有没有哪个数位是
就好。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
bool flag = true; // 读
int sum = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] == '3')
{
flag = false;
break;
}
else
sum += s[i] - '0';
if (sum % 3 == 0)
flag = false;
if (flag)
cout << s;
else
cout << "guo";
return 0;
}
D.缺or满?
分析
- 难度:简单的贪心模拟
- 做法:显然只要把都加到水最多的水杯的水量即可。即找到所有数的最大值,然后求“每个数与最大值的差”之和即可。
- 子任务 1(30 分):第一个数就是最大值,方便了很多,不用数组直接循环也可以。
- 子任务 2(30 分):最后一个数才是最大值,用数组存储后直接求“每个数与最后一个数的差”之和即可。
- 子任务 3(40 分):正常数组存储,然后找到最大值,再求“每个数与最大值的差”之和即可。
- 不用数组的做法:如果不允许用数组的话,在找到最大值后就不能回过头去看每个数了。此时可以在枚举输入时直接算出每个水杯灌到
水量需要多少水,然后减去最大值和 的差乘以 即可。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int n;
int a[1005];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
int maxAi = a[1];
for (int i = 1; i <= n; i++)
maxAi = max(maxAi, a[i]);
int ans = 0;
for (int i = 1; i <= n; i++)
ans += maxAi - a[i];
cout << ans;
return 0;
}