题目描述
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。
输入描述:
测试数据有多组,输入n。
输出描述:
对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。
示例1
输出
复制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,即可免去第三重循环!!