Description
有n个铜钱买了n只鸡,其中公鸡一只 5 钱、母鸡一只 3 钱,小鸡3 只一 钱 ,问n只鸡中公鸡、母鸡、小鸡各多少?
Input
第一行输入一个t(t<=10),代表有t组数据,接下来t行,每行输入一个数n(100<=n<=1000),代表有n个铜板,需要买n只鸡
Output
输出格式如下:
输出所有可能的结果,以公鸡数递增输出
每行第一个数为公鸡数,第二个数为母鸡数,第三个数为小鸡数,每两个数之间有一个空格
Sample Input
1 100
Sample Output
0 25 75 4 18 78 8 11 81 12 4 84
本题用枚举的算法可以求出结果。在枚举时,可以控制条件,减少计算量。
另外,只要使用2层循环就够,如果用3层循环,计算量会大很多。
int main()
{
int cock,hen,chicken,money,n,k=0;
int p,Count;
scanf("%d",&Count);
for (p=0;p<Count;p++)
{
scanf("%d",&n);
for(cock=0;cock<n;cock++)
{
for(hen=0;hen<(n-cock);hen++)
{
chicken=n-cock-hen;
if(chicken%3 != 0) //小鸡必须能被3整除,可以减少很多不必要的计算
continue;
money=cock*5+hen*3+chicken/3;
if(money==n)
{
k=k+1;
printf("%d %d %d\n",cock,hen,chicken);
}
}
}
}
return 0;
}