這是陳老師給出的幾個提示:字符串、搜索、模擬
嗯…這一道題是可以用搜索來做的,但是有的同學如果沒有學過或不掌握就會顯得很吃虧,
所以今天呢,我就講解一個大家 都懂的 —— 循環嵌套
首先呢,我們來解釋一下樣例:
2 10 5
b d f i j
可用的字符:
b c d e f g h i j
b x d x f x x i j
接下來繼續看最後一位能不能移動:
j 不能移動,再看 i;
i 後面被佔滿了,不能移動;
f 後面還有 g, h,能移動,
所以 f 移動至 g,
爲了字典序最小,所以後面的字符要對齊 g;
因此就得出了第一個:b d g h i;
後面同理,時間緊迫,就不解析了;
代碼就不復制啦 (20行,還闊以再壓
上僞代碼(跟真實代碼沒啥區別):
int main(){
in(s,t,w,str); //如題目所說,字符區間,長度,字符
for(i=1~5) //要輸出5個字符串
for(j=w-1~0) //爲了字典序最小,所以先變後面的(別問我爲什麼,實在不行私聊)
if(str[j]+1 <= 極限字符-(w-j)) //極限字符就是'a'+t的距離;w-j是j後面還有多少字符
for(k=j+1~w) 更新後面的字符;
輸出;退出;
}