GESP二级 枚举与模拟法真题汇总

2025年6月

编程题

编程题1:数三角形

方法: 嵌套枚举

问题描述:

直角三角形有两条直角边与一条斜边, 设两条直角边的长度分别为a, b, 则直角三角形的面积为 a*b/2。请你计算当直角边长a, b均取不超过n的正整数时, 有多少个不同的面积为整数的直角三角形。直角边长分别为a, b和a’, b’的两个直角三角形相同, 当且仅当 a=a’, b=b’ 或者 a=b’, b=a’。

输入描述:

一行,一个整数n,表示直角边长的最大值。

输出描述:

输出一行,一个整数,表示不同的直角三角形数量。

样例输入1:

3

样例输出1:

3

样例输入2:

5

样例输出2:

9

编程题2:幂和数

方法: 嵌套枚举

问题描述:

对于正整数n, 如果可以表为两个2的次幂之和, 即 n = 2x + 2y (x, y均为非负整数), 那么称为幂和数。给定正整数l, r, 请你求出满足 l ≤ n ≤ r 的整数n中有多少个幂和数。

输入描述:

一行,两个正整数l, r。

输出描述:

输出一行,一个整数,表示l, r之间幂和数的数量。

样例输入1:

2 8

样例输出1:

6

样例输入2:

10 100

样例输出2:

20

2025年3月

单选题

第12题

方法: 嵌套枚举

题目描述:

哥德巴赫猜想是指大于2的偶数都可以分解为两个质数之和,下面的代码用于验证4-1000之内的偶数能否分解为两个质数之和。下面C++代码中假设isPrime()是已经定义好用于判断正整数是否为质数,返回bool值。对该段代码,错误的说法是( )。

代码片段:

for (i=4; i < 1000; i += 2)
    for (j=2; j<i; j++)
        if (isPrime(j) && isPrime(i-j)){
            printf("%d=%d+%d\n", i, j, i-j);
            break;
        }
        

2024年6月

编程题

编程题1:平方之和

方法: 枚举

问题描述:

小杨有n个正整数 a1, a2, …, an。他想知道对于所有的 i (1 ≤ i ≤ n), 是否存在两个正整数x和y满足 x*x + y*y = ai

输入描述:

第一行包含一个正整数n, 代表正整数数量。之后n行, 每行包含一个正整数ai

输出描述:

对于每个正整数 ai, 如果存在两个正整数x和y满足条件, 输出Yes, 否则输出No。

样例输入:

2
5
3
        

样例输出:

Yes
No
        

2024年3月

单选题

第8题

方法: 模拟

题目描述:

下面C++代码执行后的输出是?

代码片段:

int s, t, ans;
s = 2, t = 10;
ans = 0;
while (s != t){
    if (t % 2 == 0 && t / 2 >= s)
        t /= 2;
    else
        t -= 1;
    ans += 1;
}
cout << ans;
        

第9题

方法: 模拟

题目描述:

下面C++代码执行后的输出是?

代码片段:

int n, masks, days, cur;
n = 17; masks = 10, days = 0;
cur = 2;
while (masks != n){
    if (cur == 0 || cur == 1)
        masks += 7;
    masks -= 1;
    days += 1;
    cur = (cur + 1) % 7;
}
cout << days;
        

2023年12月

编程题

编程题1:小杨做题

方法: 模拟

问题描述:

为了准备考试,小杨每天都要做题。第1天,小杨做了a道题;第2天,小杨做了b道题;从第3天起,小杨每天做的题目数量是前两天的总和。此外,小杨还规定,当自己某一天做了大于或等于m题时,接下来的所有日子里,他就再也不做题了。请问,到了第N天,小杨总共做了多少题呢?

输入描述:

总共4行。第一行一个整数a, 第二行一个整数b, 第三行一个整数m, 第四行一个整数N。

输出描述:

一行一个整数,表示小杨N天里总共做了多少题目。

样例输入:

1
2
10
5
        

样例输出:

19

2023年9月

编程题

编程题2:数字黑洞

方法: 模拟

问题描述:

给定一个三位数,要求各位不能相同。将这个三位数的三个数字重新排列,得到的最大的数,减去得到的最小的数,形成一个新的三位数。对这个新的三位数可以重复上述过程。神奇的是,最终一定会得到495! 现在,输入一个三位数,你能通过编程得出,这个三位数经过多少次变换能够得到495吗?

输入描述:

输入一行, 包含一个符合要求的三位数N。

输出描述:

输出一行, 包含一个整数C, 表示经过C次变换得到495。

样例输入:

352

样例输出:

4

2023年6月

编程题

编程题1:找素数

方法: 嵌套枚举

问题描述:

小明刚刚学习了素数的概念:如果一个大于1的正整数,除了1和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数A和B之间(包括A和B)有多少个素数?

输入描述:

输入2行, 第一行包含正整数A, 第二行包含正整数B。约定2 ≤ A < B ≤ 1000。

输出描述:

输出一行, 包含一个整数C, 表示找到C个素数。

样例输入:

2
10
        

样例输出:

4

编程题2:自幂数判断

方法: 模拟 / 枚举

问题描述:

自幂数是指, 一个N位数, 满足各位数字N次方之和是本身。例如, 153是3位数, 其每位数的3次方之和, 1³ + 5³ + 3³ = 153, 因此153是自幂数。现在, 输入若干个正整数, 请判断它们是否是自幂数。

输入描述:

输入第一行是一个正整数M, 表示有M个待判断的正整数。从第2行开始的M行, 每行一个待判断的正整数。

输出描述:

输出M行, 如果对应的待判断正整数为自幂数, 则输出英文大写字母’T’, 否则输出英文大写字母’F’。

样例输入:

3
152
111
153
        

样例输出:

F
F
T
        

2023年3月

编程题

编程题2:百鸡问题

方法: 嵌套枚举

问题描述:

“百鸡问题”是出自我国古代《张丘建算经》的著名数学问题。大意为:“每只公鸡5元,每只母鸡3元,每3只小鸡1元;现在有100元,买了100只鸡,共有多少种方案?”。现在对这个问题进行扩展: 如果每只公鸡x元, 每只母鸡y元, 每z只小鸡1元; 现在有n元, 买了m只鸡, 共有多少种方案?

输入描述:

输入一行, 包含五个整数, 分别为问题描述中的x、y、z、n、m。

输出描述:

输出一行, 包含一个整数C, 表示有C种方案。

样例输入:

5 3 3 100 100

样例输出:

4