2024 年 6 月青少年软编等考 C 语言四级真题解析
目录
- T1. 人以群分
-
- 思路分析
- T2. 那就别担心了
-
- 思路分析
- T3. 凑零钱
-
- 思路分析
- T4. 拼题 A 打卡奖励
-
- 思路分析
T1. 人以群分
社交网络中我们给每个人定义了一个 “活跃度”,现希望根据这个指标把人群分为两大类,即外向型( o u t g o i n g outgoing outgoing,即活跃度高的)和内向型( i n t r o v e r t e d introverted introverted,即活跃度低的)。要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。
时间限制:1 s
内存限制:64 MB
- 输入
输入第一行给出一个正整数 N N N( 2 ≤ N ≤ 1 0 5 2 ≤ N ≤ 10^5 2≤N≤105)。随后一行给出 N N N 个正整数,分别是每个人的活跃度,其间以空格分隔。题目保证这些数字以及它们的和都不会超过 2 31 2^{31} 231。 - 输出
按下列格式输出:
其中 N 1 N1 N1 是外向型人的个数; N 2 N2 N2 是内向型人的个数; N 3 N3 N3 是两群人总活跃度之差的绝对值。Outgoing #: N1 Introverted #: N2 Diff = N3
- 样例输入 1
10 23 8 10 99 46 2333 46 1 666 555
- 样例输出 1
Outgoing #: 5 Introverted #: 5 Diff = 3611
- 样例输入 2
13 110 79 218 69 3721 100 29 135 2 6 13 5188 85
- 样例输出 2
Outgoing #: 7 Introverted #: 6 Diff = 9359
思路分析
此题考查简单模拟,在四级考试中难度较低。
将输入数据进行排序,然后将第 1 ∼ ⌊ n / 2 ⌋ 1\sim \lfloor n/2\rfloor 1∼⌊n/2⌋ 个人归为内向型,其余人归为外向型,分别计算活跃度之和,然后求出其差值即可。
/*
* Name: T1.cpp
* Problem: 人以群分
* Author: Teacher Gao.
* Date&Time: 2025/02/22 13:55
*/
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n, a[100005];
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a + 1, a + n + 1);
int outgoing = 0, introverted = 0;
for (int i = 1; i <= n / 2; i++) introverted += a[i];
for (int i = n / 2 + 1; i <= n; i++) outgoing += a[i];
printf("Outgoing #: %d\n", n - n / 2);
printf("Introverted #: %d\n", n / 2);
printf("Diff = %d\n", outgoing - introverted);
return 0;
}
T2. 那就别担心了
下图转自 “英式没品笑话百科” 的新浪微博 —— 所以无论有没有遇到难题,其实都不用担心。
博主将这种逻辑推演称为 “逻辑自洽”,即从某个命题出发的所有推理路径都会将结论引导到同一个最终命题(开玩笑的,千万别以为这是真正的逻辑自洽的定义……)。现给定一个更为复杂的逻辑推理图,本题就请你检查从一个给定命题到另一个命题的推理是否是 “逻辑自洽” 的,以及存在多少种不同的推理路径。例如上图,从 “你遇到难题了吗?” 到 “那就别担心了” 就是一种 “逻辑自洽” 的推理,一共有 3 3 3 条不同的推理路径。
时间限制:1 s
内存限制:64 MB
- 输入
输入首先在一行中给出两个正整数 N N N( 1 < N ≤ 500 1 < N ≤ 500 1<N≤500)和 M M M,分别为命题个数和推理个数。这里我们假设命题从 1 1 1 到 N N N 编号。
接下来 M M M 行,每行给出一对命题之间的推理关系,即两个命题的编号 S 1 , S 2 S_1, S_2 S1,S2,表示可以从 S 1 S_1 S1 推出 S 2 S_2 S2。题目保证任意两命题之间只存在最多一种推理关系,且任一命题不能循环自证(即从该命题出发推出该命题自己)。
最后一行给出待检验的两个命题的编号 A , B A, B A,B。 - 输出
在一行中首先输出从 A