1

GESP认证C++编程真题解析 | 202303 二级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


编程题

B3836 百鸡问题

【题目来源】

洛谷:[B3836 GESP202303 二级] 百鸡问题 - 洛谷

【题目描述】

“百鸡问题”是出自我国古代《张丘建算经》的著名数学问题。大意为:

“每只公鸡 \(5\) 元,每只母鸡 \(3\) 元,每 \(3\) 只小鸡 \(1\) 元;现在有 \(100\) 元,买了 \(100\) 只鸡,共有多少种方案?”

小明很喜欢这个故事,他决定对这个问题进行扩展,并使用编程解决:如果每只公鸡 \(x\) 元,每只母鸡 \(y\) 元,每 \(z\) 只小鸡 \(1\) 元;现在有 \(n\) 元,买了 \(m\) 只鸡,共有多少种方案?

【输入】

输入一行,包含五个整数,分别为问题描述中的 \(x\)\(y\)\(z\)\(n\)\(m\)。约定 \(1 \le x,y,z \le 10\)\(1 \le n,m \le 1000\)

【输出】

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

【输入样例】

5 3 3 100 100

【输出样例】

4

【算法标签】

《洛谷 B3836 百鸡问题》 #循环结构# #GESP# #2023#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int x, y, z;  // 三种单位的价格
int n;       // 总价
int m;       // 总数量
int ans;     // 可行方案数量

int main()
{
    // 输入三种单位的价格
    cin >> x >> y >> z;
    
    // 输入总价和总数量
    cin >> n >> m;
    
    // 枚举第一种单位的数量i
    for (int i = 0; i <= m; i++)
    {
        // 枚举第二种单位的数量j
        for (int j = 0; j <= m - i; j++)
        {   
            // 计算第三种单位的数量k
            int k = m - i - j;
            
            // 检查条件:总价等于n 且 k能被z整除
            if (x * i + y * j + k / z == n && k % z == 0)
            {
                ans++;  // 增加可行方案数量
            }
        }
    }
    
    // 输出可行方案数量
    cout << ans << endl;
    
    return 0;
}

【运行结果】

5 3 3 100 100
4

B3837 画三角形

【题目来源】

洛谷:[B3837 GESP202303 二级] 画三角形 - 洛谷

【题目描述】

输入一个正整数 \(n\),请使用大写字母拼成一个这样的三角形图案(参考样例输入输出):三角形图案的第 \(1\) 行有 \(1\) 个字母,第 \(2\) 行有 \(2\) 个字母,以此类推;在三角形图案中,由上至下、由左至右依次由大写字母 \(\texttt{A}-\texttt{Z}\) 填充,每次使用大写字母 \(\texttt Z\) 填充后,将从头使用大写字母 \(\texttt A\) 填充。

【输入】

输入一行,包含一个正整数 \(n\)。约定 \(2 \le n \le 40\)

【输出】

输出符合要求的三角形图案。注意每行三角形图案的右侧不要有多余的空格。

【输入样例】

3

【输出样例】

A
BC
DEF

【算法标签】

《洛谷 B3837 画三角形》 #循环结构# #GESP# #2023#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int n;           // 输入的行数
char c = 'A';    // 当前输出的字符,从A开始

int main()
{
    // 输入行数
    cin >> n;
    
    // 外层循环:控制行数
    for (int i = 1; i <= n; i++)
    {
        // 内层循环:控制每行的字符数
        for (int j = 1; j <= i; j++)
        {
            // 输出当前字符
            cout << c;
            
            // 更新字符
            if (c < 'Z')
            {
                c++;  // 如果小于Z,移动到下一个字母
            }
            else
            {
                c = 'A';  // 如果达到Z,重置为A
            }
        }
        
        // 每行结束后换行
        cout << endl;
    }
    
    return 0;
}

【运行结果】

3
A
BC
DEF
posted @ 2026-01-18 20:56  热爱编程的通信人  阅读(0)  评论(0)    收藏  举报