题目如下:用 "H", "E", "L", "L", "O", "H", "E", "I", "M", "A" 这十一个字符,
用java写一个函数,打印出所有不同的排列,如:HELLOHEIMA! ,HEIMAHELLO!等,
要求:L后面跟A,H后面跟I,E和M相隔两个字符,O和!不相邻,不能有连续两个相同的字符(如LL或HH),
O在I前面(不是I前面跟O而是O的位置在I前面,可以相邻可以不相邻)
class Play2 {
public static void main(String[] args) {
int[] a = {7,4,11,11,14,7,4,8,12,-32,0};
int[] y =new int[11];
L: for (int q=0 ;q<=9 ;q++ ) {
if (q==7) {
continue;
}
y[0]= a[q];
int[] a1= delete(a,y[0]);
for (int w=0;w<=9 ;w++ ) {
y[1]=a1[w];
int[] a2=delete(a1,y[1]);
for (int e =0;e<=8 ;e++ ) {
y[2]=a2[e];
int[] a3 =delete(a2,y[2]);
for (int r=0;r<=7 ;r++ ) {
y[3]=a3[r];
int[] a4= delete(a3,y[3]);
for (int t =0;t<=6 ;t++ ) {
y[4]=a4[t];
int[] a5=delete(a4,y[4]);
for (int u=0;u<=5 ;u++ ) {
y[5]=a5[u];
int[] a6 = delete(a5,y[5]);
for (int m=0;m<=4 ; m++) {
y[6]=a6[m];
int[] a7 =delete(a6,y[6]);
for (int p=0;p<=3 ;p++ ) {
y[7]= a7[p];
int[] a8= delete(a7,y[7]);
for (int s =0;s<=2 ;s++ ) {
y[8]=a8[s];
int[] a9=delete(a8,y[8]);
a: for (int c=0;c<=1 ;c++ ) {
y[9]=a9[c];
int[] a10=delete(a9,y[9]);
y[10]=a10[0];
for (int i =0;i<=10 ;i++ ) { //对当前数组分析是否满足限制条件,,, 不满足则继续下一个遍历循环,
if (y[i]==0&&y[i-1]!=11) {
continue a;
}
if (y[i]==8&&y[i-1]!=7) {
continue a;
}
if (i<=2&&y[i]==12&& y[i+3]!=4) {
continue a;
}
if (i>=8&& y[i]==12&&y[i-3]!=4) {
continue a;
}
if (i>2&&i<8&&y[i]==12&&y[i-3]!=4&&y[i+3]!=4) {
continue a;
}
if (i<=9&&y[i]==y[i+1]) {
continue a;
}
if (i<=9&&((y[i]==14&&y[i+1]==-32)||(y[i]==-32&&y[i+1]==14))) {
continue a;
}
if (y[i]==14) {
for (int j =0;j<i ;j++ ) {
if (y[j]==8) {
continue a;
}
}
}
}
char[] ch = new char[11];
for (int v =0;v<=10 ;v++ ) {
System.out.print(ch[v]=(char)(y[v]+65));
}
System.out.println();
}
}
}
}
}
}
}
}
}
}
}
public static int[] delete(int[] arr, int c){
int i =0;
for (i =0;i<arr.length ;i++ ) {
if (arr[i]==c) {
break;
}
}
int[] a= new int[arr.length-1];
for (int j =0;j<arr.length-1 ;j++ ) {
if (j<i) {
a[j]=arr[j];
}
if (j>=i) {
a[j]=arr[j+1];
}
}
return a;
}
}
|
|