3496. 鸡兔同笼
Constraints
Time Limit: 1 secs, Memory Limit: 256 MB
Description
一个笼中有x只鸡和y只兔(x和y可以为0). 它们总共有m个头和n只脚(0 <= m, n <= 10000). 从键盘读入m和n的值,从屏幕输出x和y的值. 如果无解,则输出No answer.
Input
有多组输入数据. 输入数据的每行是两个整数m和n. m和n都为0表示输入结束(不需要处理这一行).
Output
对于每组输入数据,输出x和y的值,x和y之间用空格隔开. 如果无解,则输出No answer.
Sample Input
5 16
3 15
0 0
Sample Output
2 3
No answer
Problem Source
林瀚
鸡兔同笼问题,原来同搬砖问题,所以代码的很多部分可读性很差,是用搬砖问题的代码改过来的。
// Problem#: 3496
// Submission#: 1984395
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<iostream>
#include<stdio.h>
using namespace std;
class RemoveBricks
{
int iNumberOfPeople;
int iNumberOfBricks;
public:
//set函数输入人数iNumberOfPeople,砖头数iNumberOfBricks
void set(int iNumberOfPeople,int iNumberOfBricks)
{
RemoveBricks::iNumberOfPeople=iNumberOfPeople;
RemoveBricks::iNumberOfBricks=iNumberOfBricks;
}
//求解并输出解的个数
void Calculate()
{
int y,z;
int counter=0;
for(y=0;y<=(RemoveBricks::iNumberOfPeople);y++){
for(z=0;z<=(RemoveBricks::iNumberOfPeople);z++){
if((y+z)==RemoveBricks::iNumberOfPeople && (2*y+4*z)==RemoveBricks::iNumberOfBricks){
cout<<y<<" "<<z<<endl;
counter++;
}
}
}
if(counter==0){
cout<<"No answer"<<endl;
}
}
};
int main()
{
int a,b;
cin>>a>>b;
while(a!=0 && b!=0)
{
RemoveBricks rb;
rb.set(a,b);
rb.Calculate();
cin>>a>>b;
}
return 0;
}