Output
每组测试数据的运行结果输出为一张表,表头固定为“COCKS,HENS,CHICKS”。每组测试数据的一个可行解数出为一行,为三个整数:“x,y,z”。多组解按照公鸡数从少到多的顺序输出。若测试数据无解则输出“Cannot buy!”。两组测试数据之间用一个空行分隔开。
Sample Input
COCK,HEN,CHICK,MONEY,CHICKS
3,2,1/3,100,100
5,3,1/3,100,100
8,5,1/7,100,100
8,5,1/7,300,300
Sample Output
COCKS,HENS,CHICKS
0,40,60
5,32,63
10,24,66
15,16,69
20,8,72
25,0,75
COCKS,HENS,CHICKS
0,25,75
4,18,78
8,11,81
12,4,84
Cannot buy!
COCKS,HENS,CHICKS
8,40,252
HINT
本题重点在于了解多重循环的运行效率问题,减少一层循环可以降低很大规模的运算量。通过在循环体内加计数器可以统计出循环的运行次数,当测试数据变大时,运行次数的增长会非常可观,这就是超时的原因了。
#include
#include
int main()
{ int a,b,c,d,cock,chick,hen,m,n;int flag=0;char ch;scanf("%s",&ch);//输入字符串while(scanf("%d,%d,%d/%d,%d,%d",&a,&b,&c,&d,&m,&n)!=EOF)//多组测试数据输入
{ flag=0;for(cock=0;cock<=m/a;cock++)//cock是公鸡的数量{chick=((n*b-m)-(b-a)*cock)*d/(b*d-c); //hen是母鸡的数量hen=n-cock-chick;//chick是小鸡的数量if((cock*a*d+hen*b*d+chick*c==m*d)&&(t%d==0)&&(hen>=0)&&(chick>=0))//满足条件总钱数为m,小鸡的数量是d的整数倍{if(flag==0)printf("COCKS,HENS,CHICKS\n");//每组数据开头打出目表flag++;printf("%d,%d,%d\n",cock,hen,chick);}}if(flag==0){printf("Cannot buy!\n");printf("\n");}elseprintf("\n");
}}
条件判断的时候小鸡的那个不用是d的整数倍