有時候沒範例可以參考難以理解,這篇就是個範例
雖然題目是自己想的,但也不排除是我潛意識根據以前寫過的題目,或略做修改而成。
然後很好,這邊沒有字串,沒有switch
/*
題目:給定 N 個一位數的相異數字(>0),印出所有這些數字可組成(一個數字用一次)的 N 位數
輸入:
第一行給定數字 N (N<10) 代表接下來有幾行
接下來 N 行,每一行包含一個數字
輸出:
把所有可組成的 N 位數印出來
範例輸入:
3
2
3
5
範例輸出:
235
253
325
352
523
532
*/
#include <stdio.h>
void permutation(const int *nums,int *curr,int *used,const int numberOfNums,const int ith)
{
if(numberOfNums<=ith)
{
for(int x=0;x<ith;x++) printf("%d",curr[x]);
printf("\n");
return;
}
for(int x=0;x<numberOfNums;x++)
{
if(used[x]) continue;
curr[ith]=nums[x];
used[x]=1;
permutation(nums,curr,used,numberOfNums,ith+1);
used[x]=0;
}
}
int main()
{
int n;
scanf("%d",&n); // scanf 要填位址給他
int numbers[n],current[n];
int used[n];
for(int x=0;x<n;x++) used[x]=0;
for(int x=0;x<n;x++) scanf("%d",numbers+x); // numbers+x 是指以 numbers[0] 的位址為起點(0), +x 個 numbers[0] 的型別 (這裡即int)
permutation(numbers,current,used,n,0);
return 0;
}