- 2025年新学期热身赛
【题解】2025年新学期热身赛
- 2025-2-14 15:57:01 @
T1 难or易?
难度:简单的条件判断语句。
算法:模拟。
子任务 ( 分):保证了 ,直接输出 就好。
子任务 ( 分):保证了 是奇数,只需要判断是否小于 就可以知道该输出什么。
子任务 ( 分):基础的条件判断语句,可以用三个分支,也可以嵌套一层。
C++ 代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
if (n < 5) cout << "normal" << endl;
else if (n % 2 == 1) cout << "easy" << endl;
else cout << "difficult" << endl;
return 0;
}
T2 好or坏?
难度:循环数位分解基础题。
算法:枚举。
子任务 ( 分):保证了 是一个一位数,变成了简单的条件判断的题目,只需要根据是否为 就可以算出具体的数。
子任务 ( 分):保证了 是一个四位数,不需要循环数位分解。直接取个十百千位即可。
子任务 ( 分):在基础的数位分解的循环基础上配合上计数即可。
C++ 代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int cnt3 = 0, cntE = 0;
while (n > 0)
{
if (n % 10 == 3) cnt3 ++ ;
else cntE ++ ;
n /= 10;
}
if (cnt3 > cntE) cout << "good" << endl;
else cout << "bad" << endl;
return 0;
}
T3 读or过?
难度:简单的字符串枚举,主要给大家提醒了一下转义符的使用。
算法:字符串处理,枚举。
子任务 ( 分):保证了 在 范围内。只需要按照第二题的做法来循环数位分解即可。
子任务 ( 分):整型没法存储那么大的数,所以需要用字符串存储。这个子任务保证了没有 ,只需要判断是否是 的倍数即可。按照提示,如果一个数的所有数位之和为 的倍数,那么它就是 的倍数。所以只需要计算 位的字符串的所有数字字符对应的数字之和是否是 的倍数即可。
子任务 ( 分):在做子任务 的基础上,顺带看看有没有哪个数位是 就好。
C++ 代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
bool flag = true; // 读
int sum = 0;
for (int i = 0, len = s.size(); i < len; i ++ )
if (s[i] == '3')
{
flag = false;
break;
}
else sum += s[i] - '0';
if (sum % 3 == 0) flag = false;
if (flag) cout << s << endl;
else cout << "guo" << endl;
return 0;
}
T4 缺or满?
难度:简单的贪心模拟。
算法:贪心,模拟。
显然只要把都加到水最多的水杯的水量即可。即找到所有数的最大值,然后求“每个数与最大值的差”之和即可。
子任务 ( 分):第一个数就是最大值,方便了很多,不用数组直接循环也可以。
子任务 ( 分):最后一个数才是最大值,用数组存储后直接求“每个数与最后一个数的差”之和即可。
子任务 ( 分):正常数组存储,然后找到最大值,再求“每个数与最大值的差”之和即可。
不用数组的做法: 如果不允许用数组的话,在找到最大值后就不能回过头去看每个数了。此时可以在枚举输入时直接算出每个水杯灌到 水量需要多少水,然后减去最大值和 的差乘以 即可。
C++ 代码:
#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 << endl;
return 0;
}
1 comments
-
leixinhang2012 LV 7 @ 2025-2-14 17:13:39
老师我T4有更短的方法:
#include<bits/stdc++.h> using namespace std; int n,a,b; int main(){ cin >> n; for(int i=0;i<n;i++){ int x; cin >> x; if(x>b & i!=0) a+=i*(x-b); else if(i==0) goto loop; else a+=b-x; loop : b=max(b,x); } cout << a; }
- 1