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