百鸡问题

题目描述

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

输入描述:

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

输出描述:

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

输入

复制
40

输出

复制
x=0,y=0,z=100
x=0,y=1,z=99
#include<iostream>
using namespace std;
int main()
{
    int n;//钱数
    int i,j,k;
    while(cin>>n)
    {
        int x = 3*n<100?3*n:100;
        //cout<<x<<endl;
        for( i=0;i<=n/5;i++)
        {
            
            for( j=0;j<=(n-5*i)/3;j++)//关键
            {
                
                for( k=x;k>=98;k--)
                {
                    if(5*i+3*j+k/3>n)
                         continue;
                    double z = (double)k;
                    if(i+j+k==100&&5*i+3*j+z/3<=n)
                        cout<<"x="<<i<<",y="<<j<<",z="<<k<<endl;
                    
                }              
            }            
        }
    }
    return 0;
}

总结:之前用三重循环,一直超时,将第二重循环的判断条件稍加修改,使得代码优化,通过;看网上另z=100-i-j,即可免去第三重循环!!

原文地址:https://www.cnblogs.com/ttzz/p/10338315.html