【汉中校区】1/31周赛题解

~ 2026-2-6 9:40:14

A.难or易?

分析

  • 难度:简单的条件判断语句
  • 子任务 1(30 分):保证了 x<5x\lt 5,直接输出 normal 就好。
  • 子任务 2(30 分):保证了 xx 是奇数,只需要判断是否小于 55 就可以知道该输出什么。
  • 子任务 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 分):保证了 nn 是一个一位数,变成了简单的条件判断的题目,只需要根据是否为 33 就可以算出具体的数。
  • 子任务 2(30 分):保证了 nn 是一个四位数,不需要循环数位分解。直接取个十百千位即可。
  • 子任务 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 分):保证了 xxint 范围内。只需要按照第二题的做法来循环数位分解即可。
  • 子任务 2(30 分):整型没法存储那么大的数,所以需要用字符串存储。这个子任务保证了没有 33,只需要判断是否是 33 的倍数即可。按照提示,如果一个数的所有数位之和为 33 的倍数,那么它就是 33 的倍数。所以只需要计算 10001000 位的字符串的所有数字字符对应的数字之和是否是 33 的倍数即可。
  • 子任务 3(40 分):在做子任务 2 的基础上,顺带看看有没有哪个数位是 33 就好。

满分参考代码

#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 分):正常数组存储,然后找到最大值,再求“每个数与最大值的差”之和即可。
  • 不用数组的做法:如果不允许用数组的话,在找到最大值后就不能回过头去看每个数了。此时可以在枚举输入时直接算出每个水杯灌到 10001000 水量需要多少水,然后减去最大值和 10001000 的差乘以 nn 即可。

满分参考代码

#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;
}


我们会审查剪贴板内容,并对发布不合适内容的同学进行相应的处理