2009-08-22 3 views
0
#include<stdio.h> 
#include<conio.h> 
main() 
{ 
int i,j,k,x,y,n=4,a[]={1,2,3,4}; //n is the length of the array 
for(i=0;i<n;i++) 
{ 
    for(k=0;k<(n-2);k++) 
    { 
    for(j=(n-1-k);j>=1;j--) 
    { 
     y=a[j]; 
     a[j]=a[j-1]; 
     a[j-1]=y; 
     for(x=0;x<n;x++) 
     { 
     printf("%d",a[x]); 
     } 
     printf("\t"); 
    } 
    } 
} 
getch(); 
} 
+2

질문을 제출했을 때 문제가 발생했다고 생각합니다. 서식이 엉망이고 코드가 없습니다. 질문을 해결할 수 있습니까? – Lucas

+0

그래, 맞춰봐. –

+3

버그가 뭔지 설명해 주겠니? – Toad

답변

1

변경이 내 프로그램에서 버그를 알아낼 수 없습니다 : 이것에

for(k=0;k<(n-2);k++) 

을 :

또한
for(k=0;k<(n-1);k++) 

, 더 자세한 설명 변수 이름을 사용하려고 ..

+2

. 24 개의 결과가 24 개의 올바른 결과를 의미하지는 않습니다. –

+0

정확하게. 알고리즘은'n! '시간을 분명히 출력하지 않기 때문에 잘못되었습니다. – avakar

+0

나는 asker의 알고리즘이 정확하지 않다는 것을 알고 있지만 정확성에 대해서는 묻지 않았다. 그는 우리에게 24 개의 순열 대신 20 개의 "버그"를 발견하도록 요청했습니다. 내가 아는 한, 그는 그 특별한 알고리즘을 사용하기를 원하는 아주 좋은 이유가있다. –

2

약간의 추가 자료 (나는 술에 취해있다. 내일은 다시 편집해야 할 것이므로 소금 한 알씩 가져 가야한다) :

크 누스와 세지윅은 모두 이전에 순열을 다루었습니다. 당신이 N http://www.princeton.edu/~rblee/ELE572Papers/p137-sedgewick.pdf

N에 대한 항목 :

은 보라! permutations, 그래서 13 항목에 대해 이미 6 227 020 800 순열이 있습니다. 따라서 많은 수의 항목에 대한 모든 순열을 만드는 것은 불가능 해집니다.

순열, 순위 지정/단점 생성 및 증분 변경 방법을 만드는 알고리즘은 기본적으로 두 세트가 있습니다.

랭킹/랭킹을 사용하면 두 가지 방법으로 순위를 매기거나 올릴 수 있습니다.

순위는 genereration 순서에있는 순열의 위치를 ​​줄 것이다.

Unrank은 정수 m에있는 순열을 제공합니다. 0> = m < = n! 및 n 순열을 만들려는 항목의 양.

이 같은 경우 다양한 유용하다 : 임의의 순열을 생성

(당신은 0에서 n으로 난수를 생성하고 (난수) unrank 전화!) 및 위치 난수의 순열을 얻을.

다음 순열 얻기 : 순열 p를가지고 순위 (p)를 호출 한 다음 순위를 매기 지 않음 (순위 +1).

증분 변경 방법 :

이 기본적으로 교환을 통해 작동 및 순위/unranking보다 더 효율적입니다 : 위키 피 디아에서

, 정렬되지 않은 세대 :

function permutation(k, s) { 
    for j = 2 to length(s) { 
     swap s[(k mod j) + 1] with s[j]; // note that our array is indexed starting at 1 
     k := k/j;  // integer division cuts off the remainder 
    } 
    return s; 
} 
1

나는이 점을 모르는 그러나 std :: next_permutation 구현을 읽으려고 시도 할 수 있습니다. 루프로 모든 순열을 생성하는 것은 다소 까다 롭지 만 재귀를 사용하는 것이 더 좋습니다.

+0

+1, C에서 초보자가 iterators를 사용하는 템플릿 기반 C++ 코드를 파싱 할 것이라고는 생각하지 않지만. 그러나'next_permutation'에 대한 좋은 기사가 있습니다 : http://marknelson.us/2002/03/01/next-permutation/ – avakar