总时间限制:
10000ms
单个测试点时间限制:
1000ms
内存限制:
131072kB
描述
“A钱买A鸡”的问题:3文钱可以买1只公鸡,2文钱可以买1只母鸡,1文钱可以买3只小鸡,要用A文钱买A只鸡,请输出总的方案数。
输入
一个正整数A,A≤1000。
输出
一个正整数,表示用A文钱买A只鸡的总的方案数。
样例输入
100
样例输出
6
解题思路:用枚举法直接把所有方案都找出来,用三重循环分别表示三种鸡的数量,其中小鸡数量只能取3的倍数,因为小鸡只能3只3只的买。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int a, count = 0; //count用来记录买鸡方案数
cin >> a;
for (int i = 0; i <= a; i++)//i表示公鸡数量
for (int j = 0; j <= a; j++)//j表示母鸡数量
for (int k = 0; k <= a; k+=3)//k表示小鸡数量,只能是3的倍数,所以每次循环加3
if(i + j + k == a && i*3 + j*2 + k/3 == a)//小鸡总数等于a,钱的总和等于a
count++;
cout<<count<<endl;
}
也可以做改进,因为有时候循环变量并不会取到A,因为公鸡买到A只很明显会超过A钱,母鸡也不可能买A只,买A只也很明显超过A钱,而且母鸡买的数量不能超过(A-公鸡数量)。小鸡买的数量也不可能超过(A-公鸡数量-母鸡数量),所以循环的次数可以做的更少。只需要改三次循环的值的终止条件就行。
改进代码
#include <iostream>
using namespace std;
int main()
{
int a, count = 0; //count用来记录买鸡方案数
cin >> a;
for (int i = 0; i <= a/3; i++)//i表示公鸡数量, 公鸡不会超过a/3,否则超过A钱
for (int j = 0; j <= a/2; j++)//j表示母鸡数量,母鸡不会超过a/2,否则超过A钱
for (int k = 0; k <= a - i - j; k+=3)//k表示小鸡数量,只能是3的倍数,所以每次循环加3,小鸡不会超过(A-公鸡数量-母鸡数量)
if(i + j + k == a && i*3 + j*2 + k/3 == a)//小鸡总数等于a,钱的总和等于a
count++;
cout<<count<<endl;
}