简单数字生成器逻辑

时间:2011-04-20 14:08:32

标签: java

我有一个号码0127

我正在尝试在JAVA中生成数字跟随序列的逻辑

0
1
2
7
01
12
27
012
127
0127
1270
2701
7012
01270
12701
27012
.
.

我正在打破我的脑袋: - )

5 个答案:

答案 0 :(得分:1)

将其分为两个步骤:子串和超弦。

有时,解决大问题的最佳方法是将工作分成更容易解决的小问题。

对于子字符串,请使用嵌套for循环。

  1. 将子字符串长度从1转换为string.length() - 1
  2. 0string.length() - 1 - substringLength
  3. 循环开始字符

    在内部循环中,从给定的起始字符生成给定长度的子字符串。这将生成所有子字符串。

    对于超弦,您只需要一个循环来选择起始字符。对于循环中的每个项目,从该字符开始并构建字符串,直到给定的长度,从最后一个字符包装到第一个字符。

答案 1 :(得分:1)

我会将数字转换为String对象,然后转换为字符数组。

从那里,您可以使用以下逻辑迭代数组:

        int MAX_LENGTH = 10;
        char[] array = "0127".ToCharArray();
        for (int i = 0; i < MAX_LENGTH; i++)
        {
            for (int offset = 0; offset < array.Length; offset++)
            {
                String disp = "";
                for (int j = 0; j <= i; j++)
                {
                    int index = j + offset;
                    while (index >= array.Length)
                        index -= array.Length;
                    disp += array[index];
                }
                Console.WriteLine(disp);
            }
        }

MAX_LENGTH更改为输出字符串的最大长度。

以下是此代码生成的输出: enter image description here

答案 2 :(得分:1)

00127(包含)的前几行都是{0,1,2,7}的子序列(缺少空集)。

对于其余部分 - 就像响铃,您选择一个起始编号,然后朝一个方向“走”n步:

               0
              / \
             7   1
              \ /
               2

这会产生:

n=1: 0,    1,    2,    7
n=2: 01,   12,   27,   70
n=3: 012,  127,  270,  701
n=4: 0127, 1270, 2701, 7012

但是我看不到这两个部分之间的联系 - 你确定,问题中的序列是完整的,没有数字丢失吗?特别是70,270和701?

答案 3 :(得分:1)

int MAX_LENGTH = 5;
        String[] numStr = {"0","1","2","7"};
        for (int i = 0; i < MAX_LENGTH; i++)
        {
            for (int offset = 0; offset < numStr.length; offset++)
            {
                if(i>0 && offset+1 == numStr.length) continue;
                String disp = "";
                for (int j = 0; j <= i; j++)
                {
                    int index = j + offset;
                    if (index >= numStr.length)
                        index -= numStr.length;
                    disp += numStr[index];
                }
                System.out.println(disp);

            }
        }

答案 4 :(得分:0)

这是我的解决方案。它使用测试的数字执行,并生成相同的序列:

public static void printSequence(String number) {
    final char[] charNumber = number.toCharArray();
    final int sizeNumber = number.length();

    int MAX_ITER = 5;
    for (int i = 0; i < MAX_ITER; i++) {
        for (int offset = 0; offset < sizeNumber; offset++) {
            String subSequence = "";
            for (int j = 0; j <= i; j++) {
                int index = (j + offset) % sizeNumber;
                subSequence += charNumber[index];
            }
            System.out.println(subSequence);
        }
    }
}