2017-05-08 1 views
0

다음은 숙제가 아닙니다. 난 그냥 내 자신의 순열 코드를 작성하려고 해요. 아이디어가 있지만 코드로이 아이디어를 작성하는 데 문제가 있습니다.특정 배열 요소 교환 문제

예에서의 입력은 다음에 출력 될 것으로 예상되는 myArray={1,2,3};

이다

1 2 3 
2 1 3 
2 3 1 
3 2 1 
3 1 2 
1 3 2 

제가 그것이 제와 제 소자를 스위칭함으로써 가능 파악하고 있지만 (제 3과 제되지 전환 전적으로 가능하지만, 나는 이것이 필요하다는 것을 알고있다).

그래서 내 질문은 Java에서 어떻게 할 수 있습니까?

나는 1 2 3을 가지고 있으며, 첫 번째 요소를 두 번째로 바꾸고 싶습니다. 따라서 2 1 3이 나옵니다. 이것을 인쇄하십시오. 이제 세 번째 요소로 두 번째 요소를 전환하려면 2 3 1을 인쇄하십시오. 길이가 myArray 길이 인 n! 번을 반복하십시오.

나는 다음 코드를 사용하여이 작업을 수행하려하지만 난 그게 내가 제대로 생각을 이해하면

public class Test{ 
    public static void main(String[] args){ 
     int[] myArray = {1,2,3}; 

     for(int x=0; x<6; x++){ 
      for(int i=0; i<myArray.length-1; i++){ 
       int temp=myArray[i]; 
       myArray[i]=myArray[i+1]; 
       myArray[i+1]=temp; 
      } 
      for(int i=0; i<myArray.length; i++){ 
       System.out.print(myArray[i]+" "); 
      } 
      System.out.println(""); 
     } 
    } 
} 
Output: 
2 3 1 
3 1 2 
1 2 3 
2 3 1 
3 1 2 
1 2 3 
+1

먼저 모든 스왑 후에 인쇄하고 싶습니다. – maszter

+0

이것 좀 보셨습니까? http://stackoverflow.com/questions/2920315/permutation-of-array? 두 번째 대답이 도움이 될 것입니다. – quackenator

답변

1

는 잘 모르겠어요 :(에서 멀리 떨어져있어처럼 보인다.

public static void main(String[] args) { 
    int[] myArray = {1, 2, 3}; 
    for (int i = 0; i < 6; i++) { 
     print(myArray); 
     int temp = myArray[i % myArray.length]; 
     myArray[i % myArray.length] = myArray[(i + 1) % myArray.length]; 
     myArray[(i + 1) % myArray.length] = temp; 
    } 
} 

private static void print(int[] array) { 
    for (int anArray : array) { 
     System.out.print(anArray + " "); 
    } 
    System.out.println(""); 
} 

편집 : 나는 눈치

는 잘못된 순서가있다, 그래서해야 더 나은 :

public static void main(String[] args) { 
    int[] myArray = {1, 2, 3}; 

    for (int i = 0; i < 6; i++) { 
     int idx = i % (myArray.length - 1); 
     print(myArray); 
     int temp = myArray[idx]; 
     myArray[idx] = myArray[idx + 1]; 
     myArray[idx + 1] = temp; 
    } 
}