全排列問題 萌新的方法

2021-08-19 04:13:46 字數 1014 閱讀 2732

作為乙個剛接觸c程不久的學生,我表示csdn裡大神們用的解題方式好多都不明其意

所以我決定用自己的想法來嘗試

at first:

我意圖降低難度,編寫乙個可以有重複的全排列。

因此我想把它做成乙個數,是以n(個數)為進製數的一串數,輸出

然而我發現要做未知量進製的進製轉化**太過麻煩

second:

我想用二位陣列解決,但是並沒*用;

然後我開始看了一下大神們的**233

#include

#include

這種**抬頭你讓我乙個剛看完譚浩強的紅皮書的大一學生怎麼理解

thrid:

在我的不斷努力下還是找到了一種思路:

交換乙個從賦值為1到n的一維陣列。詳情見(

但是....這解決了全排列,可是簡單地有重複的問題卻沒有解決

finally:

我決定按照一維陣列的想法自食其力,在一維陣列的條件下完成n進製的情況

思路:設定乙個一維n項陣列,給每一項設定初始值1;

讓n-1項的值一直加一,當它的值大於n時讓n-2的值加一,同理用遍歷達成,還完成了n進製的問題

然後用乙個標記,記錄陣列中出現相同數字的次數,如果次數》0,則不列印這一串陣列,反之列印;

最後用乙個條件,當陣列中的數大於最終值時,停止函式,防止函式無限迴圈。

最終**為

#include

int main ( )

print(a,n);

return0;

}void print(int *a,int n)}}

if(flag==0)

printf("\n");

}a[n-1]+=1;

for(i=n-1;i>=0;i--)

}for(i=0;isum+=*(a+i);

}if(sum!=n*n)    print(a,n);

else    return;   

}同理轉化為有重複的全排列也是可以進行的

全排列問題

一 全排列問題演算法描述如下 舉例 345的全排列分別為 345 354 435 453 534 543,可見將整組數中的所有的數分別與第乙個數交換,這樣就總是在處理後n 1個數的全排列。又舉例 45的全排列有 45 54 可見將第乙個數分別與後面的數交換後輸出即為45的全排列。所以,對於乙個很長一...

全排列問題

題目描述814 全排列問題 鍵盤輸入n 1 n 10 個字元,輸出輸出其全排序。第一行為字元個數k,第二行為k個字元,不用空格隔開。輸出其每種排列佔一行,各字元間用一空格隔開。樣例輸入 3abc 樣例輸出 a b c a c b b a c b c a c b a c a b includeint ...

全排列問題

全排列就是從第乙個數字起 每個數分別與它後面的數字交換 用c 寫乙個函式,如 foo const char str 列印出 str 的全排列,如 abc 的全排列 abc,acb,bca,dac,cab,cba。第一種方法 用遞迴 不包含有重複數字或字元出現的情況 void swap char a,...