2012-10-05 35 views
-1

對不起,如果我的問題不清楚,可以說我有int a = 1234;。 如何打印如下所示的任意長度?java程序打印整數數字作爲洗牌

123 132 213 231 321 312

在此先感謝。

+3

你如何決定,只有前3位的選擇? – nhahtdh

+1

[你有什麼嘗試?](http://whathaveyoutried.com) –

+3

至少,告訴我們在問這個問題之前你已經做了多少努力:) –

回答

1
public class Test { 
    private static void swap(int[] p, int i, int j) { 
     int t= p[i]; 
     p[i]= p[j]; 
     p[j]= t; 
     return; 
    } 
     private static boolean nextPerm(int[] p) { // need p.length > 1 
     int n= p.length; 
     int i= n; 
     if (i-- < 1) return false; 
     for(;;) { 
      int ii= i--; 
      if (p[i] < p[ii]) { 
       int j= n; 
       while (!(p[i] < p[--j])); 
       swap(p, i, j); 
       for (j= n; j > ii; swap(p, --j, ii++)); 
       return true; 
      } 
      if (i == 0) { 
       for (int j= n; j > i; swap(p, --j, i++)); 
       return false; 
      } 
     } 
    } 
    public static void main(String[] args) { 
     int x = 123; 
     String s = "" + x; 
     int n = s.length(); 
     int[] p = new int[n]; 
     for (int i = 0; i < n; i++){ 
      p[i] = i; 
     } 
     do { 
      for (int i = 0; i < n; i++){ 
       System.out.print(s.charAt(p[i])); 
      } 
      System.out.println(); 
     } 
     while (nextPerm(p)); 
    } 
} 
-1

終於讓我找到,下面是代碼,

class ShuffleNumber { 
private static int[] a = {1,2,3}; 

private static void print(int[] a) { 
for (int i = 0; i < a.length; i++) 
    System.out.print(" " + a[i]); 
    System.out.println(); 
} 

private static void shuffle(){ 
int[] b = (int[])a.clone(); 
for (int i = b.length - 1; i > 0; i--) { 
    int j = (int)Math.floor(Math.random() * (i+1)); 
    int temp = b[j]; 
    b[j] = b[i]; 
    b[i] = temp; 
} 
print(b); 
} 

public static void main(String[] args) { 
    for (int i = 0; i < 10; i++) 
     shuffle(); 
} 

}

+0

這洗牌,但不會產生所有排列組合 –