遞迴 求數字各種排列的和

2021-09-07 21:55:27 字數 1135 閱讀 7214

description

給你乙個數字n(1<=n<10000),並且n的各個位上沒有0

他想知道將n的每個位置上的數字全部拿出來,重新排列得到的所有數字的和是多少

比如122的所有排列為:122+212+221=555

input

有多組輸入資料,第一行為乙個數字case,代表有多少組輸入資料 (case<=20)

以下case行每行包含乙個正整數n(1<=n<10000),n的意義如上所述

output

一共case行,每行乙個整數對應n的所有排列得到的數字的和

sample input 2

12212

sample output

55533

解題思路:求乙個字串的全排列問題,是看那本《c語言的科學與技術》,講得非常好。遞迴方法來求。把前k個字元固定後,再遞迴的求剩下的字元的全排列即可,知道k等於字元的長度,就把字串輸出。同時還要考慮把字串的第k個字元與後面的字元交換的情況。即:

abcd->

遞迴bacd->

遞迴cbad->

遞迴dbca->

遞迴

在本題中,還要考慮的乙個問題是重複。如何避免重複的情況,在這我採取的是每次交換前,先判斷被交換的i位置上的字元和k到i之間的字元是否有重複,有重複的話就不交換,這樣這道題就可以做了。

//

西電2012acm校賽

#include

#include

#include

intnresult;

void add(char *str)

nresult +=tmp;

}void swapstr(char *str,int k,int

i)int isswap(char *str,int k,int

i) }

return1;

}static

void permutewithfixedprefix(char *str,int

k)

else}}

}static

void listpermutations(char *str)

intmain()

return0;

}

演算法 數字的全排列 遞迴

對於數字的全排列問題,相比於使用窮舉法來說,通過遞迴法來解決可以大大減少演算法的時間複雜度與空間複雜度,使用遞迴演算法的好處即是 拋給程式乙個執行條件,乙個約束條件 結束遞迴過程 程式便可自己完成所有過程。輸入乙個數字n,使用遞迴演算法輸出1 n所有的排列 全排列問題 includeusing na...

資料結構 遞迴求數字旋轉方陣

注意觀察a b c d四個區域 有顏色的區域 void fillinnum int number,int begin,int matrixsize 從數字number開始填寫,例如從1開始填寫 matrixsize為n維方陣,第乙個填充的左上角的下標為 begin,begin 如下 include ...

用遞迴的方法進行數字排列

問題描述 求由數字1,2,3可以組成的所有三位數時,執行三次for迴圈就可以 求由數字1,2,3可以組成的所有四位數時,執行四次for迴圈就可以。但是對於數字1,2,3,當我們任意給定數字位數n時,該如何用python編寫程式?答 對於不同的n,執行for迴圈的次數不一樣,考慮用遞迴的方法來解決這一...