用递归做鸡兔同笼

已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。
输入
第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10)
a行里,每行都有一个n和m.(0 输出
输出鸡兔的个数,或者No answer
样例输入
2
14 32
10 16
思路:把总数和脚数做为递归的参数,然后找到它们的相似性,再找到出口。
相似性:f(n-1,m-2) n代表总数,m代表总脚数。n减去鸡的数量 ,m就要减去鸡的脚数。、
出口:当n4==m时代表剩下的都是兔的数量,然后返回兔的数量(n),有可能全是鸡的数量,所以当n2==m时,兔的数量就是0。
当前面两个出口都不满足,m<0时,就是输出No answer 所以还要添加一个全局变量tt用来判断输入的数是否满足条件。

import java.util.Scanner;

public class 鸡兔同笼 {
static boolean tt=true; //用来判断输入的数是否满足鸡兔同笼的条件
	public static void main(String[] args) {
		Scanner sn = new Scanner(System.in);
		int n = sn.nextInt(); //n代表有几组数
		for (int i = 0; i < n; i++) {
			int a=sn.nextInt(); //a代表总数
			int b=sn.nextInt();//b代表总脚数
			if (tt==false) { 
				System.out.print("No answer");
			}else {
				System.out.print(a-f(a, b)+" "+f(a, b));
			}
		}
	}
	public static int f(int n,int m) {
		//出口
		if (n*4==m) { //判断剩余兔的数量和脚数相不相等
			return n;
		} else if(n*2==m){ //判断是不是都是鸡的数量
			return 0;
		}
		else if(m<0) { //当脚数小于0时,代表不满足条件,输出No answer 
		tt=false;
			 return 0;
		}
		//相似性
		return f(n-1,m-2);  
	}
}

你可能感兴趣的:(用递归做鸡兔同笼)