第十三届蓝桥杯大赛软件赛省赛(C/C++ 大学C组)

蓝桥杯 2022年省赛真题
C/C++ 大学C组

  • 试题 A: 排列字母
  • 试题 B: 特殊时间
  • 睡觉


  柿子要挑软的捏,写到哪是哪。


试题 A: 排列字母

本题总分: 5 5 5


【问题描述】

  小蓝要把一个字符串中的字母按其在字母表中的顺序排列。

  例如, L A N Q I A O \mathrm{LANQIAO} LANQIAO 排列后为 A A I L N O Q \mathrm{AAILNOQ} AAILNOQ

  又如, G O O D G O O D S T U D Y D A Y D A Y U P \mathrm{GOODGOODSTUDYDAYDAYUP} GOODGOODSTUDYDAYDAYUP 排列后为 A A D D D D D G G O O O O P S T U U Y Y Y \mathrm{AADDDDDGGOOOOPSTUUYYY} AADDDDDGGOOOOPSTUUYYY

  请问对于以下字符串,排列之后字符串是什么?

   W H E R E T H E R E I S A W I L L T H E R E I S A W A Y \mathrm{WHERETHEREISAWILLTHEREISAWAY} WHERETHEREISAWILLTHEREISAWAY

【答案提交】

  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个由大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。


AAAEEEEEEHHHIIILLRRRSSTTWWWY


#include 

char *str = "WHERETHEREISAWILLTHEREISAWAY";

int total[128];

int main() {
    while (*str) ++total[*str++];
    for (char i = 'A'; i <= 'Z'; ++i)
        while (total[i]--) putchar(i);
}

  指针乱飞就完事了。


试题 B: 特殊时间

本题总分: 5 5 5


【问题描述】

   2022 2022 2022 2 2 2 22 22 22 22 22 22: 20 20 20 是一个很有意义的时间,年份为 2022 2022 2022,由 3 3 3 2 2 2 1 1 1 0 0 0 组成,如果将月和日写成 4 4 4 位,为 0222 0222 0222,也是由 3 3 3 2 2 2 1 1 1 0 0 0 组成,如果将时间中的时和分写成 4 4 4 位,还是由 3 3 3 2 2 2 1 1 1 0 0 0 组成。

  小蓝对这样的时间很感兴趣,他还找到了其它类似的例子,比如 111 111 111 10 10 10 11 11 11 01 01 01: 11 11 11 2202 2202 2202 2 2 2 22 22 22 22 22 22: 02 02 02 等等。

  请问,总共有多少个时间是这种年份写成 4 4 4 位、月日写成 4 4 4 位、时间写成 4 4 4 位后由 3 3 3 个一种数字和 1 1 1 个另一种数字组成。注意 1111 1111 1111 11 11 11 11 11 11 11 11 11: 11 11 11 不算,因为它里面没有两种数字。

【答案提交】

  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


212


  在 3 3 3 个相同的个位数中插入 1 1 1 个个位数,显然可以组成 4 4 4 个不同的数字(不一定是 4 4 4 位数),于是我们可以另一个合法的 月日时分 与 4 4 4 个不同的年份组成映射关系,只要统计出合法的 日月时分 个数,将其乘上一个 4 4 4,答案就被计算出来了。

#include 

int buff[10], ans = 0;

int days[]{0, 31, 29, 31, 30 ,31, 30, 31, 31, 30 ,31, 30, 31};

int main() {
    for (int MM = 1; MM <= 12; ++MM)
        for (int dd = 1; dd <= days[MM]; ++dd)
            for (int HH = 0; HH < 24; ++HH)
                for (int mm = 0; mm < 60; ++mm) {
                    for (int i = 0; i < 10; ++i) buff[i] = 0;
                    ++buff[MM / 10]; ++buff[MM % 10];
                    ++buff[dd / 10]; ++buff[dd % 10];
                    bool flag1 = 1, flag2 = 1;
                    for (int i = 0; i < 10; ++i)
                        if (buff[i] == 3) flag1 = 0;
                        else if (buff[i] == 1) flag2 = 0;
                    if (flag1 || flag2) continue;
                    --buff[HH / 10]; --buff[HH % 10];
                    --buff[mm / 10]; --buff[mm % 10];
                    for (int i = 0; i < 10; ++i)
                        if (buff[i] != 0) flag1 = 1;
                    if (!flag1) ++ans;
                }
    printf("%d", ans << 2);
}

睡觉

你可能感兴趣的:(蓝桥杯,c/c++)