题目的主要信息:
- 公鸡一只5元,母鸡一只3元,小鸡三只一元
- 打印出所有100元买100只鸡的情况
- 题目输入的是无用信息
方法一:暴力枚举
具体做法:
从题干信息我们可以得到,100元最多可以买25只公鸡,可以买33只母鸡,可以买100只小鸡,而每种鸡都可以是0只,因此每种鸡的范围就找到了,我们只要三层遍历,依次是上述三种鸡的每种可能性,然后计算每种可能性下是否满足鸡的总数要等于100,花费的金额要等于100的情况,满足才能打印。
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n; //任意输入
double total = 100;
for(int i = 0; i <= 20; i++) //遍历所有可能的公鸡
for(int j = 0; j <= 33; j++) //遍历所有可能的母鸡
for(int k = 0; k <= 100; k++) //遍历所有可能的小鸡
if(i + j + k == 100 && 5 * double(i) + 3 * double(j) + double(k) / 3 == total) //鸡的总数等于100且花费金额也等于100
cout << i << " " << j << " " << k << endl;
return 0;
}
复杂度分析:
- 时间复杂度:,所有的数字已知,可以看成一个常数时间,也可以将100看成是,那么总共遍历次,即为
- 空间复杂度:,无额外空间
方法二:解方程
具体做法:
这不过就是一个的二元一次方程,化简解得:,因为都是整数,所以公鸡的数量必须是4的倍数,同时,要保证母鸡数量不为负数,那么公鸡的数量就只能在0只到3只之间,那我们只就知道方程的解为:
- 公鸡:
- 母鸡:
- 小鸡:
其中上述,我们只要遍历0-3依次输出即可。
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n; //任意输入
for(int i = 0; i <= 3; i++)
cout << 4 * i << " " << 25 - 7 * i << " " << 75 + 3 * i << endl;
return 0;
}
复杂度分析:
- 时间复杂度:,常数时间
- 空间复杂度:,常数空间