题目描述
浙江工商大学校园里绿树成荫,环境非常舒适,因此也引来一批动物朋友来此居住。
童心未泯的redraiment就经常带些碎面包什么的去广场喂鸽子和兔子,并和它们玩耍。一点也不像大学生,还是一副老不正经的样子,呵呵。
随着鸽子和兔子数目的增多,redraiment带的那点食物已经不够它们瓜分了。为了能让自己的好朋友吃的饱饱的,redraiment决定统计一下有多少只鸽子和有多少只兔子,以便带来足够的食物。一、二、三、四、五...他开始数了。
现在,他已经知道有这些鸽子和兔子一共有n个头和m只脚。请你帮他写个程序计算一下一共有多少只鸽子和兔子。
输入
输入包括多组数据。 每行包括2个数据:n、m(代表上面题目中提到的意思1≤n, m≤230)。 n、m都是整数。 输入以0 0作为结束。
输出
每组数据的输出都只有一行,分别是鸽子的数量和兔子数量。 如果输入的测试数据不能求得结果,那肯定是redraiment这个马大哈数错了,就输出"Error"提示他。
样例输入
35 94 1 3 0 0
样例输出
23 12 Error
提示
报告参见http://acm.zjgsu.edu.cn/Report/1003/1003.html
来源
解析:此题为经典的鸡兔同笼问题,但如果按照一般方程求解会时间超限,因此要用到特殊方法:
可以先让兔子都抬起2只脚,那么就有35×2=70只脚,脚数和原来差94-70=24只脚,这些都是每只兔子抬起2只脚,一共抬起24只脚,用24÷2得到兔子有12只,用35-12得到鸡有23只。
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
long n = sc.nextLong();
long m = sc.nextLong();
if (n == 0 && m == 0)
break;
long x, y;
if (n >= m || m % 2 != 0 || n < 0 || m < 0)
System.out.println("Error");
else {
y = (m - n * 2) / 2;
x = n - y;
if (y >= 0 && x >= 0)
System.out.println(x + " " + y);
else
System.out.println("Error");
}
}
}
}