输入样例:
1
10
568
输出样例:
No!
0 1 9
6 49 513
16 36 516
26 23 519
36 10 522
思路如下:
设 公鸡 x 只,母鸡 y 只,小鸡 z 只
由题意 我们可以得出这两个式子来
①x + y + z = n
②5x + 4y +2*z/3=n
我们把两个式子约一约,用我们毕生所学的数学知识可以把z给干掉
得到③:13x+10y=n
我们就可以知道y关于x 的表达式④y=(n-13x)/10
再联立①④我们也就能得到z。
x一只五元 所以最多能买n/5只,我们就将x从0开始循环到n/5
(这样写可以减少遍历的复杂度,可以更快)
y的值也要满足条件 要能整除
除此之外也要注意y和z出现负数的情况
这当然是不正确的所以我在代码的后面又多写了判断负数的语句
题目也不是很难,就这样啦
They call me Prophet,Remeber me.
代码如下:
#include <stdio.h>
int main()
{
int x,y,z;
int i;
int n;
int flag=0;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
printf("No!\n");
continue;
}
flag=0;
for(x=0; x<=(n/13)+1; x++)
{
if((n-13*x)%10==0)
{
y=(n-13*x)/10;
z=n-x-y;
if(y>=0&&z>=0)
{
printf("%d %d %d\n",x,y,z);
flag=1;
}
}
}
if(!flag)
{
printf("No!\n");
}
}
return 0;
}