语法周赛 Round 9 题解
2024年12月25日大约 2 分钟
A.王老师的新水杯
分析
- 难度:简单数学计算
- 子任务 1(30 分):由于两种方式的喝水量相同,上下限相等,输出
即可。 - 子任务 2(30 分):保证了
,因此上限为 ,下限为 ,直接输出 即可。需要注意数据范围,需要使用long long
类型记录答案。 - 子任务 3(40 分):此时
的大小不一定,加一个判断分别处理即可。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, x, y;
cin >> n >> x >> y;
if (x > y)
{
cout << (long long)n * (x - y);
}
else
{
cout << (long long)n * (y - x);
}
return 0;
}
B.代老师骑行健身
分析
- 难度:循环、求和、高级循环控制(break/continue)
- 子任务 1(30 分):保证了刚好骑了三天,可以用三个
if
分别判断 、 或 是否大于等于 。 - 子任务 2(30 分):保证了
,所以必然是第 天达到了 千米。 - 子任务 3(40 分):在循环的过程中对输入的变量求和,当总和达到
时输出天数并停止循环即可。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, ai, sum;
cin >> n;
sum = 0;
for (int i = 1; i <= n; i++)
{
cin >> ai;
sum += ai;
if (sum >= 100)
{
cout << i;
break;
}
}
return 0;
}
C.数数放了几天假
分析
- 难度:简单字符串题
- 子任务 1(30 分):字符串中仅包含
.
,每天都放假,一共上了 天班,输出 即可。 - 子任务 2(30 分):由于不好办
~
,只需要计算o
的数量即可。 - 子任务 3(40 分):可以用
double
类型计算结果。更建议尽可能避免浮点数运算,分别统计半天和整天上班的数量,最后计算结果。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
string s;
cin >> n;
cin >> s;
int one = 0;
int half = 0;
for (int i = 0; i < n; i++)
{
if (s[i] == 'o')
one++;
if (s[i] == '~')
half++;
}
one += half / 2;
half %= 2;
cout << one;
if (half == 1)
cout << ".5";
return 0;
}
D.再整理一次水杯
分析
和 Round 7 的 “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 minAi = a[1];
for (int i = 1; i <= n; i++)
minAi = min(minAi, a[i]);
int ans = 0;
for (int i = 1; i <= n; i++)
ans += a[i] - minAi;
cout << ans;
return 0;
}