【题目描述】
一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。
时间限制:1000
内存限制:65536
输入
一行,一个正整数a (a < 32768)。
输出
一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。 如果没有满足要求的答案,则输出两个0,中间用一个空格分开。
样例输入
20
样例输出
5 10
【方法1思路】
采用枚举的方法,把每一种可能枚举一遍。并迭代。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a;
cin>>a;
if(a%2 != 0){
cout<<"0 0"<<endl;
return 0;
}
int max1 = -1,min1 = 32767;
for(int i=0;i<=a/2;i++){
for(int j=0;j<=a/4;j++){
if(i*2 + j*4 == a){
max1 = max(max1,i+j);
min1 = min(min1,i+j);
}
}
}
cout<<min1<<" "<<max1<<endl;
}
【方法2思路】
这里面数量最多的时候肯定鸡尽可能多,兔子尽可能少,那么可以直接通过计算算出鸡的数量,,数量最少的时候兔子尽可能最多,这样可以算出兔子的数量。然后当兔子不够的时候可以用鸡来凑。
【代码】
#include<bits/stdc++.h>
using namespace std;
int main()
{
int number,b,c,a,min1,max1;
cin>>number;
if(number%2!=0)//首先排除掉错误的数据,因为鸡兔脚的总数必定可以被二整除
cout<<0<<" "<<0<<endl;
else if(number%4==0)//这里判断特殊情况,即可以全为兔的情况,为最少只,全为鸡为最多只
{
cout<<number/4<<" "<<number/2<<endl;
}
else//这里判断普通情况,有鸡也有兔的情况
{
b=number/4;//兔子个数
a=number%4;
c=a/2;//鸡的个数
min1=b+c;
max1=2*b+c;
cout<<min1<<" "<<max1<<endl;
//其实这里else if中的判断条件可以与else 合并。else if中的判断条件只是一种特殊情况。
}
}
【方法3】
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int t1,t2;
cin>>n;
if(n%2 != 0){
cout<<"0 0";
return 0;
}else{
t1 = n/2;//动物最多
t2 = n/4+n%4/2; //动物最少
}
cout<<t2<<" "<<t1<<endl;
}