#author("2018-08-18T11:30:10+09:00","default:togami","togami") #author("2018-08-18T11:31:13+09:00","default:togami","togami") [[C言語で解く数学入門]] * 順列生成 [#vb96c19f] * 順列の生成とカウント [#vb96c19f] #code(c++){{ #include <stdio.h> int N, cnt; int * table; int * used; void printTable() { int i; for(i = 0; i < N; i++) { printf("%d ", table[i]+1); } printf("\n"); cnt++; } void makeP(int d) { if(d == N) { printTable(); return; } int i; for(i = 0; i < N; i++) { if(used[i] == 0) { used[i] = 1; table[d] = i; makeP(d + 1); used[i] = 0; } } } int main(void) { int i; scanf("%d", &N); table = (int *) malloc(sizeof(int)*N); used = (int *) malloc(sizeof(int)*N); for(i = 0; i < N; i++) { used[i] = 0; } cnt = 0; makeP(0); printf("%d! = %d\n", N, cnt); return 0; } }}