2011-04-20 104 views
3

我公司拥有一批0127简单的数字发生器逻辑

我试图逻辑产生以下的JAVA

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

我打破我的头:-)

+0

我假设这是作业吗? – 2011-04-20 14:10:44

+0

是的..对不起,我花了很多时间,我无法得到这个愚蠢的东西 – Soft 2011-04-20 14:13:09

+1

你看到任何模式?到目前为止你有什么想法? – Datoraki 2011-04-20 14:14:45

回答

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

+1

Errr,这不是Java,它不会产生相同的序列(但我仍然认为,Soft的问题会遗漏一些数字 - 所以算法转换为Java,可能是解决问题的算法)) – 2011-04-20 14:30:50

+0

我做了稍微改变这一点,我得到了我期待的结果 – Soft 2011-04-20 14:33:24

+0

我忘了将'if'改为'while'在内部。我更新了它并张贴了一张结果图片。 @Andreas,我相信它确实产生了相同的顺序:) – 2011-04-20 14:35:49

1

除以它的序列号分为两个步骤:子串和superstrings。

有时候解决一个大问题的最好方法是把工作分解成更容易解决的小问题。

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

  1. 环路串长度到string.length() - 1
  2. 环路起始字符从0string.length() - 1 - substringLength

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

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

+2

我不得不考虑这个实际问题。只是说':) – 2011-04-20 14:19:31

+0

+1思考它比实际问题更多!我认为'O(n^3)'是可接受的运行时间复杂性为作业 – 2011-04-20 14:26:53

+0

所有发布的答案是'O(n^3)'。 – 2011-04-20 16:25:59

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?

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); 

      } 
     } 
+0

甜。确保将if(index> = numStr.length)行更改为'while(index> = numStr.length)' – 2011-04-20 14:37:12

+0

输出与您的问题中不一样 – Datoraki 2011-04-20 14:40:30

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); 
     } 
    } 
}