2011-04-20 45 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); 
     } 
    } 
}