PTA 7-6 鸡群的怜悯 (C语言)

在这里插入图片描述
输入样例:
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;
}

猜你喜欢

转载自blog.csdn.net/u014568597/article/details/112147574