杈撳叆:涓涓簭鍒梥,璇ュ簭鍒楅噷闈㈠彲鑳戒細鏈夊悓鏍風殑瀛楃,涓嶄竴瀹氭湁搴?鍜?涓涓暣鏁発
杈撳嚭:璇ュ簭鍒楀線鍚庤綆楃k涓簭鍒?鎵鏈夊簭鍒楁槸浠ュ瓧鍏稿簭鎺掑簭鐨?br />
濡傛灉浼氭湁搴忔悳绱㈢殑绔ラ瀷鑷劧鑰岀劧鑳界珛鍒誨仛鍑烘潵絎竴涓鐩?鍙槸絎簩涓鐩湪s杈冮暱鐨勬儏鍐典笅,鍗撮渶瑕佺敤妯℃嫙鑰屼笉鏄悳绱?..
澶у閮界煡閬揝TL閲岄潰鏈変釜娉涘嚱妯$増, prev_permutation鍜宯ext_permutation,鐢ㄦ硶涔熷緢綆鍗?瀹炵幇鐨勫氨鏄鐩?鐨勫姛鑳?..
浣嗘槸綆楁硶鏈濂藉緱闈犺嚜宸辨兂鍑烘潵,鑷繁鎯沖嚭鏉ョ殑鎵嶆槸鑷繁鐨?紕板埌鏂扮殑闂鎵嶈兘浜х敓鎬濇兂鐨勭伀鑺?..
搴熻瘽灝戣,棰樼洰1鐨勮В娉曞氨鏄繁鎼?涓嶈繃闇瑕佸姞涓婁竴涓猙ool鏁扮粍鏍囪鍜屼竴涓嚱鏁扮‘瀹氫笉鍚屽瓧絎︿箣闂寸殑澶у皬(鏈夊彲鑳借繖涓ぇ灝忚繕涓嶆槸Ascii鐮佸氨鑳藉喅瀹氱殑),
澶ц嚧鎻忚堪涓嬫悳绱㈣繃紼?姣斿杈撳叆搴忓垪鏄?2345,閭d箞鎴戞悳绱㈢殑榪囩▼澶ц嚧鏄涓灞傛寜欏哄簭閫夊彇1-5,榪涘叆絎簩灞傜殑鏃跺欎篃鏄寜欏哄簭閫夊彇1-5,
浠ユ綾繪帹,浣嗘槸姣忎竴灞傞噷闈㈤兘鍙兘閫夊墠闈㈢殑灞傛娌℃湁閫夎繃鐨勬暟,鑰屼笖鍥犱負鏈夐噸澶嶅瓧絎?綆楁硶榪樺繀欏諱繚璇佹瘡涓灞傞噷闈㈡寜欏哄簭閫夊彇鐨勫瓧絎﹀繀欏繪槸鍗囧簭鐨?
鐔熸?zhèn)墮搴搴忔悳鐑﹀拰鍥炴函鐨勫悓瀛?寰堣嚜鐒跺氨浼氫駭鐢熻繖鏍風殑鎯蟲硶...
POJ - 1256鐨勪唬鐮佸涓?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <algorithm>
#define MAX (13 + 10)
using namespace std;
bool bUsed[MAX];
char szAns[MAX];
char szInput[MAX];
bool CmpChar(char chOne, char chTwo)
{
if (abs(chOne - chTwo) != 'a' - 'A')
{
return tolower(chOne) - tolower(chTwo) < 0;
}
return chOne - chTwo < 0;
}
bool Greater(char chOne, char chTwo)
{
if (abs(chOne - chTwo) != 'a' - 'A')
{
return tolower(chOne) - tolower(chTwo) > 0;
}
return chOne - chTwo > 0;
}
void Gen(int nDepth, int nLen)
{
if (nDepth == nLen)
{
szAns[nLen] = '\0';
printf("%s\n", szAns);
return;
}
char chLast = '\0';
for (int i = 0; i < nLen; ++i)
{
if (!bUsed[i] && Greater(szInput[i], chLast))
{
bUsed[i] = true;
szAns[nDepth] = szInput[i];
Gen(nDepth + 1, nLen);
bUsed[i] = false;
chLast = szInput[i];
}
}
}
int main()
{
int nCases;
scanf("%d", &nCases);
while (nCases--)
{
scanf("%s", szInput);
int nLen = strlen(szInput);
sort(szInput, szInput + nLen, CmpChar);
Gen(0, nLen);
}
return 0;
}
棰樼洰2鐨勮В娉曟槸妯℃嫙,鍔熻兘綾諱技涓嶴TL鐨勯偅2涓硾鍨嬫ā鐗堝嚱鏁?綆楁硶鐨勫ぇ鑷磋繃紼嬫槸鎯沖姙娉曚粠褰撳墠搴忓垪榪涘叆涓嬩竴涓垰濂芥瘮鍏跺ぇ鎴栬呭垰濂芥瘮鍏跺皬鐨勫簭鍒?..寰堣嚜鐒舵垜浠兂鍒拌鎶婂簭鍒楀悗闈㈠ぇ鐨勫瓧絎︿氦鍜屽墠闈㈠皬鐨勫瓧絎︿氦鎹㈠氨浼氫嬌搴忓垪鍙樺ぇ,涓轟簡浣垮叾鍒氬ソ鍙樺ぇ,鍙互鎶婁氦鎹㈠悗鐨勫瓧絎︿粠浜ゆ崲浣嶇疆璧瘋嚦鏈鍚庨兘鎺掑簭涓涓?鐜板湪鐨勯棶棰樻槸鎴戜滑濡備綍閫夊彇2涓瓧絎︿氦鎹?..姝g‘鐨勬兂娉曟槸,鎴戜滑浠庢渶鍚庨潰寮濮嬪線鍓嶉潰鐪?瀵繪壘涓涓渶闀跨殑閫掑搴忓垪,鎵懼埌涔嬪悗,鎴戜滑鍙渶瑕侀夊彇閫掑搴忓垪鍓嶉潰鐨勯偅涓瓧絎hBefore鍜岄掑搴忓垪閲岄潰鐨勪竴涓渶灝忕殑姣攃hBefore澶х殑瀛楃浜ゆ崲鍗沖彲...浜ゆ崲涔嬪悗,灝嗘柊鐨勯掑搴忓垪鎺掑簭涓涓嬪嵆鍙?..
涓轟粈涔堣繖鏍峰仛浜?鍥犱負浠庡悗寰鍓嶇湅鐨勯掑搴忓垪,鏄笉鑳戒氦鎹?涓瓧絎﹁褰撳墠搴忓垪鍙樺ぇ鐨?鎵浠ュ繀欏婚夊彇鏈闀塊掑搴忓垪鍓嶉潰鐨勯偅涓瓧絎︿氦鎹?..
POJ鐧劇粌 - 1833 鐨勪唬鐮佸涓?
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX (1024 + 10)
using namespace std;
int nInput[MAX];
void GetNext(int* nInput, int nLen)
{
int i = nLen - 2;
while (i >= 0)
{
if (nInput[i] >= nInput[i + 1])
{
--i;
}
else
{
int k = i + 1;
for (int j = nLen - 1; j > i; --j)
{
if (nInput[j] > nInput[i] && nInput[j] < nInput[k])
{
k = j;
}
}
swap(nInput[i], nInput[k]);
sort(nInput + i + 1, nInput + nLen);
return;
}
}
sort(nInput, nInput + nLen);
}
int main()
{
int nCases;
scanf("%d", &nCases);
while (nCases--)
{
int nLen;
int nK;
scanf("%d%d", &nLen, &nK);
for (int i = 0; i < nLen; ++i)
{
scanf("%d", &nInput[i]);
}
for (int i = 0; i < nK; ++i)
{
GetNext(nInput, nLen);
}
for (int i = 0; i < nLen; ++i)
{
printf("%d%s", nInput[i], i == nLen - 1 ? "\n" : " ");
}
}
return 0;
}