當前位置:成語大全網 - 新華字典 - 字母組合逆向問題,希望能有C++高手用遞推法講解壹下並附上代碼,謝謝

字母組合逆向問題,希望能有C++高手用遞推法講解壹下並附上代碼,謝謝

我覺得這個題很有意思,所以做了壹下。為了方便妳,我用了string,望采納

#include <iostream>

#include <string>

using namespace std;

string nextWord(string &str, int N) //求str的下壹個字典序號

{

//求str的大小,size函數返回size_type類型,而不是int類型

string::size_type sz = str.size();

if (sz == 0) //如果是空字符串,設為A,並返回

return str = "A";

//end表示第N個字母,即字典中最大的字符。假設N=3,那麽end就是C

const char end = 'A' + N - 1;

//如果第壹個字符就是最大的,比如字典C,那它沒有下壹個字典序號了。將str置為空,並返回

if (str[0] == end)

return str = "";

//如果最後壹個字符為end,那麽刪除它,並將前壹位+1

//比如ABC,最後壹位為C,那麽刪除C,將B+1,變成AC

if (str[sz-1] == end)

{

str.erase(sz-1);

str[sz-2] += 1;

}

//否則,它的長度壹定小於N,再給它增加壹個字符

//比如AB,給它增加壹個字符B+1,變成ABC

else

str += str[sz-1] + 1;

return str;

}

int main()

{

string str;

int N, K;

cin >> N >> K;

for (int i = 1; i <= K; ++i) //求str的下壹個字典,直到求出第K個

nextWord(str, N);

cout << str << endl;

return 0;

}