zoukankan      html  css  js  c++  java
  • 递归插数字

    /*今有7对数字:两个1,两个2,两个3,…两个7,把它们排成一行。
    要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
    17126425374635
    当然,如果把它倒过来,也是符合要求的。
    请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
    注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。*/

    @SuppressWarnings("unused")
    public static void m(int b){
    //定义数组存储数据
    int[] a=new int[14];
    //定义boolean类型数组判断是否已经,使用过此数据,不会出现重复
    boolean[] c=new boolean[8];
    //如果小标b=14则直接输出结果
    if (b==14) {
    //输出结果时,限制小标0和1的位置为固定的7和4
    if (a[0]==7&&a[1]==4) {
    //遍历输出数组
    for (int i = 0; i < a.length; i++) {
    System.out.print(a[i]);
    }
    }
    return;
    }
    //如果小标为b的已经存在,就执行下一个小标的插入数据操作
    if (a[b]!=0) {
    m(b+1);
    }
    //如果小标为b的没有数据就执行以下方案
    if (a[b]==0) {
    //遍历1到7
    for (int i = 1; i < 8; i++) {
    //判断获取没有使用的1到7中的数据,
    //判断下标是否越界
    //判断规则位置是否存在数据
    if (c[i]=false&&(b+i+1)<14&&a[b+i+1]==0) {
    //指定此下表的数据
    a[b] = i;
    //指定符合规则的下表所对应的数据
    a[b + i + 1] = i;
    //设置此数字已经被使用
    c[i] = true;
    //回调此方法,执行下一个下标数据的插入
    m(b + 1);
    System.out.println("hhhhhh");
    //不通过,从新复制上一层的方法下标b值的对应数组数据
    c[i] = false;
    a[b] = 0;
    a[b + i + 1] = 0;
    }
    }

    //如果不满足条件,就跳出此时执行的当前层的方法
    return;
    }
    }

    此方法,主要的递归的运用和return的跳出时执行一层方法的结束

  • 相关阅读:
    【JS基础】数组
    【JS基础】循环
    【JS基础】DOM操作
    移动端字体
    【JQ基础】
    【JS基础】
    WebBrowser.DocumentText引发FileNotFound异常
    抽取网络信息进行数据挖掘 建立语料库
    文本分类和聚类有什么区别?
    C# 读取网页源代码
  • 原文地址:https://www.cnblogs.com/plas/p/9870944.html
Copyright © 2011-2022 走看看