/**
*
* 安排:3个A国人,3个B国人,3个C国人坐成一排。
要求不能使连要续的3个人是同一个国籍。
求所有不同方案的总数?
* @author wangmeng
*
*/
public class 排座位 {
static int sum = 0;
public static void main(String[] args) {
char[] c = new char[] { 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C' };
allSort(c, 0, c.length - 1);//所有的全排列
System.out.println(sum);
}
//所有的全排列
private static void allSort(char[] c, int low, int high) {
if (low == high) {
if (!check(c))
sum++;
}
for (int i = low; i <=high; i++) {
char temp = c[low];
c[low] = c[i];
c[i] = temp;
allSort(c, low + 1, high);
temp = c[low];
c[low] = c[i];
c[i] = temp;
}
}
//检测是否符合要求
private 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;
}
}
参考答案:
283824
排座位(安排:3个A国人,3个B国人,3个C国人坐成一排。)
最新推荐文章于 2021-02-24 14:30:08 发布