今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。 要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:



今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:


17126425374635


当然,如果把它倒过来,也是符合要求的。


请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。


注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。


暴力法如下:

public static void main(String[] args) {
                int[] ints = new int[14];

                for (int i = 0; i < 14; i++) {
                        ints[i] = 1;
                }
                ints[0] = 7;
                ints[1] = 4;
                for (ints[2] = 1; ints[2] <= 7; ints[2]++) {
                        if (twos(ints, ints[2], 2)) continue;
                        for (ints[3] = 1; ints[3] <= 7; ints[3]++) {
                                if (twos(ints, ints[3], 3)) continue;
                                for (ints[4] = 1; ints[4] <= 7; ints[4]++) {
                                        if (twos(ints, ints[4], 4)) continue;
                                        for (ints[5] = 1; ints[5] <= 7; ints[5]++) {
                                                if (twos(ints, ints[5], 5)) continue;
                                                for (ints[6] = 1; ints[6] <= 7; ints[6]++) {
                                                        if (twos(ints, ints[6], 6)) continue;
                                                        for (ints[7] = 1; ints[7] <= 7; ints[7]++) {
                                                                if (twos(ints, ints[7], 7)) continue;
                                                                for (ints[8] = 1; ints[8] <= 7; ints[8]++) {
                                                                        if (twos(ints, ints[8], 8)) continue;
                                                                        for (ints[9] = 1; ints[9] <= 7; ints[9]++) {
                                                                                if (twos(ints, ints[9], 9)) continue;
                                                                        for (ints[10] = 1; ints[10] <= 7; ints[10]++) {
                                                                                        if (twos(ints, ints[10], 10))
                                                                                                continue;
                                                                         for (ints[11] = 1; ints[11] <= 7; ints[11]++) {
                                                                                if (twos(ints, ints[11], 11))
                                                                                        continue;
                                                                         for (ints[12] = 1; ints[12] <= 7; ints[12]++) {
                                                                                   if (twos(ints, ints[12], 12))
                                                                                            continue;
                                                                          for (ints[13] = 1; ints[13] < 7; ints[13]++) {
                                                                                     if (twos(ints, ints[13], 13))
                                                                                             continue;
                                                                                                String s = "";
                                                                                              for (int i = 0; i < 14; i++) {
                                                                                                         s = s + ints[i];
                                                                                                 }
                                                                                                  if (distance(ints)) {
                                                                                                     System.out.println(s);
                                                                                                       }

                                                                          }
                                                                                                }
                                                                                        }
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }

        public static boolean distance(int[] ints) {
                String s = "";
                for (int i = 0; i < 14; i++) {
                        s = s + ints[i];
                }
                for (int k = 1; k < 8; k++) {
                        int a = s.indexOf(String.valueOf(k));
                        int b = s.indexOf(String.valueOf(k), a + 1);
                        if (b - a != k + 1) {
                                return false;
                        }

                }
                return true;
        }

        public static boolean twos(int[] ints, int k, int m) {

                int count = 0;
                for (int i = 0; i <= m; i++) {
                        if (ints[i] == k) {
                                count++;
                        }
                }
                if (count > 2) {
                        return true;
                }
                return false;
        }




最后的结果为74151643752362

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值