百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100100 文钱买 100100 只鸡,公鸡、母鸡、小鸡各买多少只?
本程序要求解的问题是:给定一个正整数 nn,用 nn 文钱买 nn 只鸡,问公鸡、母鸡、小鸡各买多少只?
输入格式
输入一个正整数 nn。
输出格式
如果有解,依次输出公鸡、母鸡、小鸡的个数(用正整数表示)。
如果无解,输出"No Answer."。
数据范围
1 \le n \le 20001≤n≤2000。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
100
样例输出复制
0 25 75
4 18 78
8 11 81
12 4 84
本题有两个点可以优化时间复杂度,将n3转为n2以下:1:不需要三重循环,只需要在最内层将z的值计算出来即可,然后进行判断,这是含有两个等式的通常方法,2:考虑x,y的分别可以取得的最大值,x最大可以取得n/5;y最大可以取得n/3,然后将除法转为乘法即可
//@author:hairu,wu
//@from:ahut
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
bool flag=false;
for(int x=0;5*x<=n;x++){
for(int y=0;3*y<=n;y++){
int z=n-x-y;
if(15*x+9*y+z==3*n){
cout<<x<<" "<<y<<" "<<z<<endl;
flag=true;
}
}
}
if(flag==false){
cout<<"No Answer."<<endl;
}
return 0;
}