2025年全国青少年信息素养大赛复赛C++集训(16):吃糖果2(题目及解析)
题目描述
现有n(50 > n > 0)个糖果,每天只能吃2个或者3个,请计算共有多少种不同的吃法吃完糖果。
时间限制:1000
内存限制:65536
输入
输入的每一行包括一组测试数据,即为糖果数n。最后一行为0,表示测试结束。
输出
每一行输出对应一行输入的结果,即为吃法的数目。
样例输入
1
2
3
4
12
0
样例输出
0
1
1
1
3
AC代码
#include<bits/stdc++.h>
using namespace std;
int n;
int main() {while (cin >> n) { // 持续读取输入直到遇到0if (n == 0) break; // 输入为0时结束程序int cnt = 0; // 初始化吃法计数器// 遍历所有可能的吃2个的次数(i的范围:0到n/2)for (int i = 0; i <= n / 2; i++) { // 遍历所有可能的吃3个的次数(j的范围:0到n/3)for (int j = 0; j <= n / 3; j++) { if (i * 2 + j * 3 == n) { // 检查当前组合是否能吃完糖果cnt++; // 满足条件则计数+1}}}cout << cnt << endl; // 输出当前n对应的吃法总数}return 0;
}
功能分析
-
输入处理
- 通过循环持续读取输入的糖果数
n
,直到遇到0
时终止程序。
- 通过循环持续读取输入的糖果数
-
枚举策略
- 外层循环
i
表示每天吃2个糖果的次数,范围是0 ≤ i ≤ n/2
(因为最多只能吃n/2
次2个)。 - 内层循环
j
表示每天吃3个糖果的次数,范围是0 ≤ j ≤ n/3
(同理)。 - 对每一组
(i, j)
检查2i + 3j == n
,若成立则视为一种有效吃法。
- 外层循环
-
计数与输出
- 统计所有满足条件的组合数
cnt
,并输出结果。
- 统计所有满足条件的组合数
文末彩蛋:
关注并查看老师的个人主页,学习完整csp信奥赛完整系列课程: https://edu.csdn.net/lecturer/7901