7对数字组合问题

问题

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

17126425374635

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

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

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

思路

按照题意来说就是,将剩下的1,2,3,5,6填入到74xxxx4x7xxxxx中。
因为这是一个有解的问题。所以每一个数字都会有其位置。通过遍历每一个空位,来寻找合适的解。
通过深搜来寻找指定的位置,当位置不符合要求就回退到上一种情况。

代码
public class Demo_FillNumber {

    public static void solve_1(){
        int[] arr = new int[14];    //将数放在数组中
        arr[0] = arr[8] = 7;
        arr[1] = arr[1+4+1] = 4;
        int[] Nums = {1,2,3,5,6};	//将存放的数放在一起
        assist_1(arr,Nums,0);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

    //深度优先搜索(每一个assist_1都是为t找到放在数组合适的位置)
    public static boolean assist_1(int arr[],int nums[],int t){
        if(t>= nums.length){	
            return true;
        }
        //给t找到第一个适合的位置,递归assist_1(t+1)。
        // 若不成功代表当前t的位置不合法,找下一个合适的位置
        for (int j = 2; j < arr.length; j++) {
            if(j+nums[t]+1 < arr.length && arr[j] == 0&& arr[j+nums[t]+1] == 0){
                arr[j] = arr[j+nums[t]+1] = nums[t];
                if(assist_1(arr,nums,t+1)){  //找到了合适的位置就返回true,返回到上一层找t对应的位置,否则就找下一个合适的位置
                    return true;
                }
                arr[j] = arr[j+nums[t]+1] = 0;//不合适,赋值为0
            }
        }
        return false;
    }

    public static void main(String[] args) {
        solve_1();
    }
}

答案为:74151643752362

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值