C語言求字母的全部組合

2021-06-09 13:24:03 字數 1143 閱讀 9473

使用的遞迴的方法:既然是組合,則順序不要求順序了。

主要原理就是從第乙個字元開始,分兩種情況:1.留下此字元;2.去除此字元。 再對剩下的字元求組合。

然後再第二個字元,分兩種情況,再對剩下的字元求組合

#include #include #include template inline void swap(t &a , t &b)

void doprintallcombination(char *str , int begin , int end)

tmp = str[end+1]; //不要此字元

str[end+1] = '\0';

printf("%s\n" , str);

str[end+1] = tmp;

return;

} //第二種情況,去除此字元

swap(str[begin],str[end]);

doprintallcombination(str , begin , end-1);

swap(str[begin] , str[end]);

//第一種情況,留下此字元

doprintallcombination(str , begin+1 , end);

}void printallcombination(char *str)

int main(int argc , char *argv)

char *str = (char*)malloc(strlen(argv[1]) + 1);

strcpy(str , argv[1]);

printf("orignate string : %s\n" , str);

printallcombination(str);

free(str);

return 0;

}

結果:orignate string : abcbc

cbaacab

abc結果中有些字元的順序改變了,如cb ,,按正常順序可能是bc,,,

這是因為我的這個程式的空間複雜度為o(1)

如果你要求產生的組合與原始字元的順序一致,,則可以使用mask代替,,標記使用不使用此字元。此時空間複雜度為o(n)

反正時間複雜度都為o(n)    

求組合數的C 實現

include iostream using namespace std intcom intn,intr returns intmain return0 上面的 只適合較小的n,經測試,當n 33 時,對於所有小於等於 n 的 m均能計算出值。n 33時,僅對於較小的m適用。在網上找了找,學會了計...

C語言 移動字母

本題要求編寫函式,將輸入字串的前3個字元移到最後。函式介面定義 void shift char s 其中char s是使用者傳入的字串,題目保證其長度不小於3 函式shift須將按照要求變換後的字串仍然存在s裡。裁判測試程式樣例 include include define maxs 10 void...

c 電話號碼的字母組合

問題 給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。分析 這道題是利用多向遞迴完成的,首先把字元 234 轉換為數字234,並找到數字234對應的字母如下圖,然後開始讓a去和數字3裡面對應的第乙個字母匹配,再讓他們兩匹配...