7-5分小组Java

分小组

9名运动员参加比赛,需要分3组进行预赛。
有哪些分组的方案呢?

我们标记运动员为 A,B,C,… I
下面的程序列出了所有的分组方法。

该程序的正常输出为:
ABC DEF GHI
ABC DEG FHI
ABC DEH FGI
ABC DEI FGH
ABC DFG EHI
ABC DFH EGI
…… …… ……

解题思路:这是一道代码填空题,可能读不懂代码,但是也能做出来,首先填空的是输出,输出的肯定是案例中的输出,调用f()方法前,可以先输出s,发现s占三个字符,说明需要填的空中也有s,并且只占3个字符,继续观察,remain()方法还是没有使用,再次试着输出它,发现还占三个字符,输出中肯定有对这个方法的调用(不然白写了),最难的是剩下三个字符在哪呢?在输出的这个方法中找,发现有三个参数,i,j,k刚好三个字符,并且一定是紧连着的,然后调三个参数的位置,和第一条输出对比,不难找出正确答案。
public class Demo_7_04
{
	public static String remain(int[] a)
	{
		String s = "";
		for(int i=0; i<a.length; i++){
			if(a[i] == 0) s += (char)(i+'A');
		}	
		return s;
	}
	
	public static void f(String s, int[] a)
	{
		for(int i=0; i<a.length; i++){
			if(a[i]==1) continue;
			a[i] = 1;
			for(int j=i+1; j<a.length; j++){
				if(a[j]==1) continue;
				a[j]=1;
				for(int k=j+1; k<a.length; k++){
					if(a[k]==1) continue;
					a[k]=1;
					System.out.println(s+(char)(i+'A')+(char)(j+'A')+(char)(k+'A')+remain(a));  //填空位置
					a[k]=0;
				}
				a[j]=0;
			}
			a[i] = 0;
		}
	}
	
	public static void main(String[] args)
	{
		int[] a = new int[9];		
		a[0] = 1;
		
		for(int b=1; b<a.length; b++){
			a[b] = 1;
			for(int c=b+1; c<a.length; c++){
				a[c] = 1;
				String s = "A" + (char)(b+'A') + (char)(c+'A');   //字符串s只有三位
				f(s,a);
				//回溯
				a[c] = 0;
			}
			a[b] = 0;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41765969/article/details/88668987
7-5