简简单单的枚举题
法一:究极暴力枚举
根据题意,我们可以获取总的头数为x,总的脚数为y
int x,y;
cin>>x>>y;
现在我们可以用总的头数去枚举每一种可能,那么鸡的只数就在0~x之间,兔子的个数也是在0~x之间
所以我们可以得到以下的枚举代码
// 先枚举鸡的数量: 0~x 只
for(int i=0;i<=x;i++){
// 再枚举兔的数量:0~x 只
for(int j=0;j<=x;j++){
// 验证方案是否合理
}
}
我们要用两个条件去验证枚举的方案是否合理。如下:
鸡的数量 + 兔的数量 = 总头数(一个动物一个头)
鸡的脚数 + 兔的脚数 = 总脚数
if(i+j==x && i*2+j*4==y){
cout<<i<<endl<<j;
return 0; // 题目只有两个输出,可以保证唯一解,找到一组就结束程序
}
完整代码:
#include<iostream>
using namespace std;
int main(){
int x,y;
cin>>x>>y;
for(int i=0;i<=x;i++){
for(int j=0;j<=x;j++){
if(i+j==x && i*2+j*4==y){
cout<<i<<endl<<j;
return 0; // 题目只有两个输出,可以保证唯一解,找到一组就结束程序
}
}
}
return 0;
}
法二:优化枚举
根据题意可知,只有鸡和兔两种动物,总数为x。如果枚举了鸡的数量,那么兔子的数量直接可算,不用继续枚举
兔的数量 = 总头数 - 鸡的数量
所以,只需要枚举鸡的数量,一个for循环即可
// 枚举鸡的数量
for(int i=0;i<=x;i++){
// 直接计算出兔的数量,不用枚举
int j = x - i;
// 验证枚举的方案是否满足要求,因为兔的数量直接算出来的,所以不用验证头数
if(i*2+j*4==y){
cout<<i<<endl<<j;
return 0; // 同上
}
}
完整代码:
// 自己改