`
michelecindy
  • 浏览: 170298 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

1、2、2、3、4、5六个数字,请打印出所有6位的排列,要求:4不能在第三个,3和5不能相邻!

    博客分类:
  • Java
 
阅读更多
package ceshi;

public class Test3 {
    // 当前固定部分
    private String CurFixPart;

    private String PreGenNum;

    public static void main(String[] args) {
        Test3 t = new Test3();
        t.GenControll("123456");
    }

    // 调整字符串s位置pos字符到最前
    private String shift(String s, int pos) {
        String newStr;
        if (s.length() > pos + 1)
            newStr = s.substring(pos, pos + 1) + s.substring(0, pos)
                    + s.substring(pos + 1);
        else
            newStr = s.substring(pos) + s.substring(0, pos);
        return newStr;
    }

    private int Validate(String newNum) {
        String newGenNum = CurFixPart + newNum;
        if (Integer.valueOf(newGenNum) <= Integer.valueOf(PreGenNum))
            return 0;
        if (newGenNum.substring(2, 3).equals("4")
                || (newGenNum.indexOf("35") != -1)
                || (newGenNum.indexOf("53") != -1))
            return 0;

        PreGenNum = newGenNum;
        System.out.println("----"+newGenNum);
      
        return 0;
    }

 public void GenControll(String Base) {
        PreGenNum = "0";
        CurFixPart = "";
        GenNext(Base, 0);
    }

    public void GenNext(String varPart, int curPos) {
        if (varPart.length() == 2) {
            Validate(varPart);
            Validate(shift(varPart, 1));
            return;
        }
        // Next Layer
        String newGen = shift(varPart, curPos);
        String SavedFixPart = CurFixPart;
        CurFixPart = CurFixPart + newGen.substring(0, 1);
        GenNext(newGen.substring(1), 0);
        CurFixPart = SavedFixPart;
        // 同层递增
        if (curPos == varPart.length() - 1)
            return;
        GenNext(varPart, curPos + 1);
        
    }
}
分享到:
评论

相关推荐

    打印杨辉三角的c语言程序

    杨辉三角是一个由数字排列成的三角形数表,一般形式如下:  1 n=0  1 1 n=1  1 2 1 n=2  1 3 3 1 n=3  1 4 6 4 1 n=4  1 5 10 10 5 1 n=5  1 6 15 20 15 6 1 n=6 现编写c语言程序使得打印以上表

    对于给定的布局,可否通过有限次的α变换和β变换变成下面的目标布局:

    把1、2、3、4、5、6六个数字分别填入A、B、C、D、E、F格子中,每个格子一个数字且各不相同。每种不同的填法称为一种布局。如下: 1 3 5 2 4 6 布局1 2 5 6 4 3 1 布局2 定义α变换如下:把A格中的数字放入B格,把B格...

    蓝点被必做的算法经典题java.c/c++

    【程序29】:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。 【程序30】写一个方法,用二分查找法判断任意整数在...

    javascript入门笔记

    特点:将 a 和 b 先转换为二进制,按位操作,对应位置上的两个数字,相同时,该位整体结果为0,不同时,该位的整体结果为 1 使用场合:快速交换两个数字 5 ^ 3 101 011 ========== 110 结果为 6 练习: ...

    c程序设计习题参考(谭浩强三版)习题参考解答

    8.7写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字之间有一个空格。如输入1990,应输出”1 9 9 0”。 52 8.8编写一函数,有实参传来一个字符串,统计此字符串中字母,数字,空格和其它字符的个数...

    打印输出魔方(它的每一行、每一列和对角线之和均相等)

    ⑶、如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应 放在第3行第3列。 ⑷、当上一个数的列数为n时,下一个数的列数应为1,行数减1。如2在第3行第3列,3应 在第2行第1列...

    一个关于java实现的迭代用法例子,太经典了

    用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求: "4 "不能在第三位, "3 "与 "5 "不能相连.

    基于hadoop用并行递归实现排列组合运算

    请写一个程序,输入M,然后打印出M个数字的所有排列组合(每个数字为1,2,3,4中的一个)。比如:M=3,输出: 1,1,1 1,1,2 …… 4,4,4 共64个 注意:这里是使用计算机遍历出所有排列组合,而不是求总数,...

    1-n整数的所有排列

    实现 整数1-n的所有的排列并且打印出来

    判断出栈序列

    比如,进栈序列为1 2 3 4,则可能的出栈序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。 【输入形式】 从标准输入读取输入。第一行是一个整数N(3≤N≤10),代表有N个元素,其进栈序列是1 2 3 …… N。第二行...

    C++实验题:打印三角形图案

    打印三角形图案 编一程序显示由符号组成的三角形图案。例如,程序运行后, 屏幕显示:How many lines? 用户输入:5 屏幕显示:What character? 用户输入:* 则输出如下图案 * *** ***** ******* ********* ...

    C语言课程设计报告.docx

    将 1,2,…,9 共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。 输入格式 无 输出格式 若干行,每行3个数字。按照每行第1个数字升序排列。 输入 无 输出 192 ...

    C语言数字金字塔实现及C和php通信

    4 5 6 7 8 9 10 ``` 实现数字金字塔算法通常包括两个步骤: 1. 生成数字金字塔数据结构:你可以使用二维数组或者其他合适的数据结构来表示数字金字塔。从顶部开始,逐行添加数字,并根据上面两个数字的和计算下一...

    java 经典习题.doc

    1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万...

    排列(DFS)

    给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 1≤n≤...

    剑指Offer(Python多种思路实现):打印从1到最大的n位数

    题:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1、2、3一直到最大的3位数999. 解题思路一:可以把问题转换成数字排列问题,用递归让代码更简洁。  class Solution: def Print1...

    Java图遍历算法一例

    java图遍历应用一例: 题目:用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

    排列程序 给出一个序列(无重复元素),输出其全部排列

    求一个序列的全排列,字典序,序列中的元素无重复,在实际应用过程中,可以按下标来做计算

    Java经典编程题(附答案)

    1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元...

    黑马入学考试试题

    其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要...

Global site tag (gtag.js) - Google Analytics