A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

        题目如下:用 "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;
        }
}

5 个回复

倒序浏览
http://bbs.itheima.com/forum.php?mod=attachment&aid=MTA5ODgyfGI3Y2Y5Y2YyZjcwN2MwZmFjMTZmNzNmMjgyOTE2MjZjfDE3NjQxNDU5Njc%3D&request=yes&_f=.png

%_F38S1PT380C6C8V{B6[X2.png (10.27 KB, 下载次数: 10)

%_F38S1PT380C6C8V{B6[X2.png
回复 使用道具 举报
不过由于算法的缺陷,,,,,  有些符合条件的排列会输出2次...
回复 使用道具 举报
竟然没人看? 太伤心了
回复 使用道具 举报
给楼主  回回贴  稍等下我也来做一遍    看来楼主现在是班上的大神啦
回复 使用道具 举报
看一看。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马