題目描述
jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文本母計數,他覺得這樣做,會使世界更加豐富多彩。在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文本母按原先的順序,排在前面的字母小於排在它後面的字母。我們把這樣的「數字」稱為jam數字。在jam數字中,每個字母互不相同,而且從左到右是嚴格遞增的。每次,jam還指定使用字母的範圍,例如,從2到10,表示只能使用這些字母。如果再規定位數為5,那麼,緊接在jam數字「bdfij」之後的數字應該是「bdghi」。(如果我們用u、v依次表示jam數字「bdfij」與「bdghi」,則u輸入格式
輸入有2行,第1行為3個正整數,用乙個空格隔開:
s t w
(其中s為所使用的最小的字母的序號,t為所使用的最大的字母的序號。w為數字的位數,這3個數滿足:1≤s第2行為具有w個小寫字母的字串,為乙個符合要求的jam數字。
所給的資料都是正確的,不必驗證。
輸出格式
輸出最多為5行,為緊接在輸入的jam數字後面的5個jam數字,如果後面沒有那麼多jam數字,那麼有幾個就輸出幾個。每行只輸出乙個jam數字,是由w個小寫字母組成的字串,不要有多餘的空格。
樣例輸入:
2 10 5
bdfij
樣例輸出:
bdghi
bdghj
bdgij
bdhij
befgh
思路:題目的意思是自己給定乙個範圍內選取字母,然後組成乙個字串,這個字串從左到右遞增(所以不可能有重複字母),然後我們的目的就是輸出輸入的字串後面五個順序的字串,而且也是嚴格遞增的。
先看**:
#includeusing namespace std;
int main()
{ int s,t,w;
string jam;
cin>>s>>t>>w>>jam;
jam[w]=t+'a'; //令jam後面加上乙個比最大字母大1的字母
for(int i=0;i<5;i++) //輸出之後的五個數字
{ for(int j=w-1;j>=0;j--) //數字位數
{ if(jam[j]+1結果:
首先給定範圍,數字帶入會比較好說,所以我們帶入樣例。
所以現在字母範圍就是b到j,然後jam數字是5位,開始jam是bdfij。
處理第一步是把jam的最後一位變成j,『a』+t的意義就是97+10=107的ascll碼代表的j。
然後迴圈,輸出五個數字,我們就模擬輸出jam的後面一位,下面是jam
jam位數值0
b1d2
f3i4
j5k首先令jam=j+1,然後現在j=5-1,j=4,jam=j,j+1=k,小於k,所以跳過,現在j=3,jam=i,i+1=j,不小於j,所以跳過,現在j=2,jam=f,f+1=g,小於i,所以現在jam=g,然後k=3,jam=jam+3-2=g+1=h,然後就完成了,所以輸出b d g h j。
來輸出第二個數字,這個時候由於迴圈跳出,所以從頭開始,只不過現在的jam是bdghjj,所以按照這個再來一次迴圈中的**,就能得到之後的結果,就不再贅述,有興趣可以自己嘗試一下。
關於**中的k-j部分,其實很好理解,你仔細一想,你在jam【j】的位置自增,後面的部分都是需要修改順序的,而一共需要修改的位數,就是k取最大w-1,然後減去j就是加的最大的數,也就是後面都修改了。
Jam的計數法
題目描述 jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文本母計數,他覺得這樣做,會使世界更加豐富多彩。在他的計數法中,每個數字的位數都是相同的 使用相同個數的字母 英文本母按原先的順序,排在前面的字母小於排在它後面的字母。我們把這樣的 數字 稱為 jam數字。在 jam數...
Jam的計數法
jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小 寫英文本母計數,他覺得這樣做,會使世界更加豐富多彩。在他的計數法中,每個數字的位數都是相同的 使用相同個數的字母 英文本母按原先的順序,排在前 面的字母小於排在它後面的字母。我們把這樣的 數字 稱為jam數字。在jam數字中,每個...
JAM的計數法
經典的題目了,自己想了個新方法 方法 先從低位往高位找到乙個可以加的位數,然後把後面的數變為前面那個數加1 建議先從主程式開始看。本人蒟蒻,不好請原諒 方法 先從低位往高位找到乙個可以加的位數,然後把後面的數變為前面那個數加1 建議先從主程式開始看。include include include u...