2020 年 9 月青少年软编等考 C 语言三级真题解析
目录
- T1. 因子问题
-
- 思路分析
- T2. 质数的和与积
-
- 思路分析
- T3. 括号匹配问题
-
- 思路分析
- T4. 吃糖果 2
-
- 思路分析
- T5. 铺砖
-
- 思路分析
T1. 因子问题
任给两个正整数 n n n、 m m m,求一个最小的正整数 a a a,使得 a a a 和 ( m − a ) (m-a) (m−a) 都是 n n n 的因子。
时间限制:1 s
内存限制:64 MB
- 输入
包括两个整数 n n n、 m m m, n n n 不超过 1 0 6 10^6 106。 - 输出
输出一个整数 a a a,表示结果。如果答案不存在,则输出-1
。 - 样例输入
35 10
- 样例输出
5
思路分析
此题考查枚举法,难度入门。
常规思路下,我们可以枚举 1 ∼ m / 2 1 \sim m / 2 1∼m/2 的所有数字,逐一验证是否满足条件,但是题目中并没有给出 m m m 的范围,这给我们带来了不小的障碍。不妨转变思路,枚举 n n n 的所有因子,事实上,由于因子成对出现这一特性,我们只需要枚举 1 ∼ n 1 \sim \sqrt{n} 1∼n 的所有数字即可,加快枚举效率。
/*
* Name: T1.cpp
* Problem: 因子问题
* Author: Teacher Gao.
* Date&Time: 2024/11/16 15:06
*/
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i * i <= n; i++) {
if (n % i == 0 && n % (m-i) == 0) {
cout << i;
return 0;
}
}
cout << -1;
return 0;
}
T2. 质数的和与积
两个质数的和是 S S S,它们的积最大是多少?
时间限制:1 s
内存限制:64 MB
- 输入
一个不大于 10000 10000 10000 的正整数 S S S,为两个质数的和。 - 输出
一个整数,为两个质数的最大乘积。数据保证有解。 - 样例输入
50
- 样例输出
589
思路分析
此题考查枚举法与素数判定,难度入门。
根据题目描述, S S S 必定是两个素数之和。由于 2 2 2 是唯一的偶素数,为了加快枚举效率,我们可以分情况讨论:
- 如果