YTU OJ 1004: 1、2、3、4、5...(鸡兔同笼问题)

题目描述

浙江工商大学校园里绿树成荫,环境非常舒适,因此也引来一批动物朋友来此居住。
童心未泯的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

 

来源

freeproblemset

解析:此题为经典的鸡兔同笼问题,但如果按照一般方程求解会时间超限,因此要用到特殊方法:

可以先让兔子都抬起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");
			}
		}
	}
}

 

你可能感兴趣的:(YTU,OJ,Java)