语法周赛 Round 17 题解
2024年12月25日大约 2 分钟
A. 整型溢出
分析
- 难度:基础条件判断。
- 子任务 1(30 分):肯定不超
int
,输出int
即可。 - 子任务 2(30 分):都是正数,只需要判断是否小于
,当然自己存储的时候要开long long
。 - 子任务 3(40 分):用
long long
类型存储结果,然后就是判断如果在int
范围内就输出int
,否则输出long long
即可。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long a, b, c;
cin >> a >> b;
c = a + b;
if (c < -2147483648 || 2147483647 < c)
cout << "long long";
else
cout << "int";
return 0;
}
B. i 的 i 次方
分析
- 难度:基础循环嵌套。
- 做法:没有子任务,一共十个点,分别是输入
的测试,也就是说可以手动算出结果后打表。标准做法就是一个基础的循环嵌套,依次算出 分别的 ,然后求和即可。注意要开long long
。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
long long res = 0;
for (int i = 1; i <= n; i++)
{
long long now = 1;
for (int j = 1; j <= i; j++)
now *= i;
res += now;
}
cout << res;
return 0;
}
C. 顺子
分析
- 难度:基础排序
- 子任务 1(30 分):保证了从小到大,不需要排序了,直接从第二个字符开始比较是不是前一个字符
即可。 - 子任务 2(30 分):互不相同又都是
abcde
中的一个,那肯定是顺子。 - 子任务 3(40 分):先排序然后按照子任务 1 处理即可。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
sort(s.begin(), s.end());
for (int i = 1; i <= 4; i++)
if (s[i] != s[i - 1] + 1)
{
cout << "No\n";
return 0;
}
cout << "Yes\n";
return 0;
}
D. 偶数位的数
分析
- 难度:暴力枚举数位分解(
)或者数学思路手动处理( ) - 子任务 1(30 分):只有一个数,判断它是不是偶数位即可。
- 子任务 2(30 分):
位数一致,那么如果 是偶数位的,答案就是 ,否则答案就是 。 - 子任务 3(40 分):枚举每个数,依次计算出位数即可。或者用数学的思路,看看所有的
位数有多少在范围里。
满分参考代码
#include <bits/stdc++.h>
using namespace std;
bool check(int x)
{
int cnt = 0;
while (x > 0)
{
cnt++;
x /= 10;
}
return cnt % 2 == 0;
}
int main()
{
int l, r;
cin >> l >> r;
int ans = 0;
for (int i = l; i <= r; i++)
ans += check(i);
cout << ans;
return 0;
}