藍橋杯Java練習——排座位 要安排:3個A國人,3個B國人,3個C國人坐成一排。

藍橋杯Java練習——排座位 要安排:3個A國人,3個B國人,3個C國人坐成一排。


要安排:3個A國人,3個B國人,3個C國人坐成一排。

要求不能使連續的3個人是同一個國籍。

求所有不同方案的總數?

 

參考答案:

283824

	public class aaa {
static int sum = 0;	// 不同方案總個數
// 檢查是否有同一國人連續3個
public static boolean check(char[] c){
int count = 1;	// 初始個數
for(int i=0;i<c.length-1;i  ){
if(c[i]==c[i 1]){
count  ;
}else{
count = 1;	// 初始個數
}
if(count>=3) return true;
}
return false;
}
// 全排列
public static void allSort(char[] c,int start,int end){
if(start>end){
if(!check(c)){	// 檢查是否有同一國人連續3個
sum  ;		// 沒有,方案總個數加1
}
return ;
}else{
for(int i=start;i<=end;i  ){
char temp = c[i];
c[i] = c[start];
c[start] = temp;
allSort(c,start 1,end);	// 遞迴
temp = c[i];
c[i] = c[start];
c[start] = temp;
}
}
}
public static void main(String[] args){
char[] pl = {'A','A','A','B','B','B','C','C','C'};
allSort(pl,0,pl.length-1);	// 全排列
System.out.println(sum);
}
}