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 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能