nyoj 64-鸡兔同笼 (解二元一次方程)
64-鸡兔同笼
内存限制:64MB
时间限制:3000ms
Special Judge: No
accepted:26
submit:58
题目描述:
已知鸡和兔的总数量为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
分析:
1、解方程,需要判断是否能通过整除得到鸡兔的个数(m-2n)%2
2、判断得到的鸡兔个数是否全部为正数
核心代码:
1 int flag1 = (m-2*n) % 2, temp1 = (m-2*n) / 2, temp2 = n - temp1; 2 if (flag1 || temp1 < 0 || temp2 < 0) 3 printf("No answer\n"); 4 else 5 printf("%d %d\n", temp2, temp1);
C/C++代码实现(AC):
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 #include <stack> 7 #include <map> 8 #include <queue> 9 #include <set> 10 11 using namespace std; 12 13 int main() 14 { 15 int t; 16 scanf("%d", &t); 17 while(t --) 18 { 19 int n, m; 20 scanf("%d%d", &n, &m); 21 int flag1 = (m - 2*n) % 2, temp1 = (m - 2*n) / 2, temp2 = n - temp1; 22 if (flag1 || temp2 < 0 || temp1 < 0) 23 printf("No answer\n"); 24 else 25 printf("%d %d\n", temp2, temp1); 26 } 27 return 0; 28 }