#include <stdio.h> #include <iostream> int data[] = { 1,2,3}; int swap(int i, int j) { int temp; if (i == j) return 0; temp = data[i]; data[i] = data[j]; data[j] = temp; return 0; } int Permutation(int TotalN, int N) { int i; if (N == 1) { for (i = 0; i < TotalN; i++) { printf("%d ", data[i]); } printf("\n"); return 0; } for (i = 0; i < N; i++) { swap(i, N - 1); Permutation(TotalN, N - 1); swap(i, N - 1); } } int main() { int N = sizeof(data) / sizeof(int); Permutation(N, N); system("pause"); return 0; } /* */ |
재귀함수 풀이하기
순열과 스왑을 만들어서 순열 조합 만들기, 오께이.
순열(3,3) 123
아이 0
스왑(0,2) 321
순열(3,2)
아이0
스왑(0,1) -> 231
순열(3,1) -> 231 출력
스왑(0,1) -> 321
아이1
스왑(1,1) -> 321
순열(3,1) -> 321 출력
스왑(1,1) -> 321
아이2
스왑(2,1) -> 312
순열(3,1) -> 312 출력
스왑(2,1) -> 321
스왑(0,2) 123
아이는 0,1,2,3,4,5,6,7,8,9, 총 10번을 돌게 됩니다. 그리고 만약 어레이 안에서 키를 서치해서 펄스가 나오면 유니크어레이에 유니크어레이 카운트에 찾은 어레이를 더하면 됩니다. 오케이요. |
i 가 0부터 9까지인데 아이를 00이라고 하면 만약 어래에[0] 이 key 이면 같으면 트루를 같은 값이 나오면 트르룰 내보냅니다. 같은 값을 찾지 못하면 펄스를 내보냅니다. 아 잠깐만 이게 포인터로 되어 있어서, 조금 헷갈리는 경향이 있긴 한데, 같은 파라미터로 키를 넣어서, 넣어서 넣어서, 넣어서, 넣어서 넣어서 서치키 어레이에서 가튼 같을 찾아고 다른 값이면 어레이 하나를 저장하는 식으로 되어 있습니다. 그럼 이것을 사용해서 어레이를 하나 만들고 같은 값이 있으면, 그 같은 값으 가진 어레이에 대해서 점수를 올려주도록 합니다. 오케이 저렇게 하나씩 늘려 가는 것은 좋은 것 같습니다. 그리고 if 같으면 arr[i] 에 대해서도 값을 올려주도록 합니다. |