题目地址:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=64
描述
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。
输入
第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10)
a行里,每行都有一个n和m.(0<m,n<100)
输出
输出鸡兔的个数,或者No answer
样例输入
2
14 32
10 16
样例输出
12 2
No answer
代码:
#include <stdio.h>
//输出结果
//n-个数和,m-腿数和
static void printResult(int n,int m);
int main()
{
int readLen = 0;
scanf("%d",&readLen);
getchar();
while(readLen > 0)
{
int n = 0;
int m = 0;
scanf("%d %d",&n,&m);
getchar();
printResult(n,m);
--readLen;
}
return 0;
}
//输出结果
//n-个数和,m-腿数和
static void printResult(int n,int m)
{
if(m<n)
{
printf("No answer");
return;
}
int tmpValue = m-2*n;
if(tmpValue < 0 || tmpValue % 2 != 0)
{
printf("No answer");
return;
}
int rabbitCount = tmpValue / 2;
int chickenCount = n - rabbitCount;
if(chickenCount < 0)
{
printf("No answer");
return;
}
printf("%d %d\n",chickenCount,rabbitCount);
}
通过方程组,解得个数的判断
兔子:(m-2n)/2
鸡:n-兔子个数
另外自己写的代码对条件的判断过于繁琐,推荐优秀程序如下:
#include<iostream>
using namespace std;
int main()
{
int n,a,b,p,q;
cin>>n;
while(n--)
{
cin>>a>>b;
q=(b-2*a)/2;
p=a-q;
if(p<0 ||q<0 || b%2) cout<<"No answer"<<endl;
else cout<<p<<" "<<q<<endl;
}
}