C/C++ 大学C组
- 试题 A: 排列字母
- 试题 B: 特殊时间
- 放一会先写 A 组的
柿子要挑软的捏,写到哪是哪。
试题 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);
}
放一会先写 A 组的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)