您的位置:首页 > 其它

Contest1100 - 软四课堂小测试4-1203-问题 A: 百鸡问题

2018-01-02 19:13 393 查看


题目描述

 用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。


输入

 测试数据有多组,输入n。


输出

  对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。


样例输入

40


样例输出

x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=1,y=0,z=99


提示

不会出现给出的钱买不到100只鸡的情况!

思路点拨:
不能使用穷举法,那样会造成时间超限,我第一次就是用三层for循环,结果造成了时间超限。
下面是我用穷举法的代码。
#include<stdio.h>

int main()

{

    int n,x,y,z;

    while(~scanf("%d",&n))

    {

        for(x=0;x<=n/5;x++)

        {

            for(y=0;y<=(n-5*x)/3;y++)

            {

                for(z=0;z<=(n-5*x-3*y)*3;z++)

                {

                    if(z+x+y==100)

                    {

                        printf("x=%d,y=%d,z=%d\n",x,y,z);

                    }

                }

            }

        }

    }

}
下面是正确的代码,我发现只需要使用两层for循环就行了,最后那个小鸡的只数可以直接根据前面两种鸡的只数算出来(总共100只嘛),但要注意最后那个小鸡的只数不能是负数,所以需要控制一下。
#include<stdio.h>

int main()

{

    double n,x,y,z;

    while(~scanf("%lf",&n))

    {

        for(x=0;x<=n/5;x++)

        {

            for(y=0;y<=(n-5*x)/3;y++)

            {

                z=100-x-y;

                if(z>=0&&z/3+y*3+x*5<=n)//注意最后这种小鸡的只数不能是负数,所以需要控制一下

                {

                    printf("x=%.0lf,y=%.0lf,z=%.0lf\n",x,y,z);

                }

            }

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: