jinyuchuan19850625 2009-10-24 11:31
浏览 185
已采纳

一道java面试题,是考算法的,不太懂,希望大家能进来看看

有六个数,分别是1,2,2,3,4,5,要求列出所有的六位数,3不能在第三位,4和5不能相连,要把所有的六位数列出来

  • 写回答

4条回答 默认 最新

  • tengxg 2009-10-25 10:44
    关注

    最直接最笨的办法:定义一个int[6]表示六个位子,我们先放有条件限制的,4、5、3
    4可能放在六位的一个,所以一个循环
    5可能放在六位的一个,所以再嵌一个循环,但此时要加限制了,不能和4重复或前后
    3可能放在六位的一个,要一个循环,加限制,不能和4、5同位且不能在第三位
    1可能放在剩下的三位的一个,也要用一个循环
    2放在剩下的两位,成功一个输出一个,
    基于以上思想,我们定义的数组初始化都为0

    public class SixNumber {

    public static void main(String[] agrs){
        int array[] = new int[]{0,0,0,0,0,0};//初始化六个位子
        int count=0;   //统计总的符合情况数
        for(int i=0;i<6;i++){        //第一个循环存放4
            array[i]=4;
            for(int j=0;j<6;j++){        //第二个循环存放5
                if(j!=i&&j!=i-1&&j!=i+1){  //加限制
                    array[j]=5;
                    for(int k=0;k<6;k++){    //第三个循环存放3
                        if(k!=i&&k!=j&&k!=2){   //加限制
                            array[k]=3;
                            for(int m=0;m<6;m++){  //第四个循环存放1
                                if(m!=i&&m!=j&&m!=k){   //加限制
                                    array[m]=1;
                                    for(int t=0;t<6;t++){   //剩下的循环就是打印出来符合的情况了
                                        if(array[t]==0){          //为0的当然是剩下的两个位子了,我们不要设置了,直接打印出2就行了
                                            System.out.print(2);
                                        }else{
                                            System.out.print(array[t]);  //此位不为0就打印出对应存放好的值就行了
                                        }
                                        if(t==5){
                                            count++;//符合情况的
                                            if(count%5==0)
                                            System.out.println();    //一种符合情况后换行
                                            else
                                            System.out.print("---------"); 
                                        }
                                    }
                                    array[m]=0;   //这里要恢复上一层,以便下一个再试
                                }
                            }
                            array[k]=0;//这里要恢复上一层,以便下一个再试
                        }
                    }
                    array[j]=0;//这里要恢复上一层,以便下一个再试
                }
            }
            array[i]=0;//这里要恢复上一层,以便下一个再试
        }
    
        System.out.println("\n共"+count+"中符合情况的");
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题