外觀數列是指具有以下特點的整數序列:
d, d1, d111, d113, d11231, d112213111, ...
它從不等於 1 的數字 d 開始,序列的第 n+1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個 d,所以就是 d1;第 2 項是 1 個 d(對應 d1)和 1 個 1(對應 11),所以第 3 項就是 d111。又比如第 4 項是 d113,其描述就是 1 個 d,2 個 1,1 個 3,所以下一項就是 d11231。當然這個定義對 d = 1 也成立。本題要求你推算任意給定數字 d 的外觀數列的第 n 項。
輸入格式:
輸入第一行給出 [0,9] 範圍內的乙個整數 d、以及乙個正整數 n(≤ 40),用空格分隔。
輸出格式:
在一行中給出數字 d 的外觀數列的第 n 項。
輸入樣例:
1 8
輸出樣例:1123123111
這個題主要難點在於理解題目上,開始看到這個題的時候我以為是字串統計的題型,但是分析樣例會發現,這個題有檢測的長度,不是每次檢測都是整個字串
例如題目中的樣例,整個過程的數字為:111
121121
122111
112213
12221131
1123123111
我做題的時候是將這個題按照佇列的形式進行處理,佇列有乙個頭指標,乙個尾指標,那麼我就把這兩個「指標」,指到待檢測的長度的開頭和結尾即可
以樣例的第7次(12221131)到第8次(1123123111)進行分析的話:
第一輪:頭f指到第乙個元素』1』,尾e指到第二個元素』2』,s[f]!=s[e],所以待檢測的字串為從1到1,所以有1個1,ss變為「11」
第二輪:頭f指到第二個元素』2』,尾e指到第三個元素』2』,s[f]=s[e],所以e++,e此時指到第四個元素』2』,s[f]=s[e],所以e++,此時e指到第五個元素』1』,s[f]!=s[e],所以待檢測的字串為從2到4,所以有3個2,所以ss變為「1123」
以此類推
在**中,我使用的是陣列模擬佇列,for迴圈裡的j當作佇列的頭指標,e當作尾指標,ss作為s的中間值
#include
#include
using namespace std;
intmain()
s = ss;
} cout << s;
return0;
}
1084 外觀數列(20 分)
外觀數列是指具有以下特點的整數序列 d,d1,d111,d113,d11231,d112213111,它從不等於 1 的數字d開始,序列的第 n 1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個d,所以就是d1 第 2 項是 1 個d 對應d1 和 1 個 1 對應 11 所以第 ...
1084 外觀數列 20 分
外觀數列是指具有以下特點的整數序列 d,d1,d111,d113,d11231,d112213111,它從不等於 1 的數字 d 開始,序列的第 n 1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個 d,所以就是 d1 第 2 項是 1 個 d 對應 d1 和 1 個 1 對應 1...
1084 外觀數列 20 分
外觀數列是指具有以下特點的整數序列 d,d1,d111,d113,d11231,d112213111,它從不等於 1 的數字 d 開始,序列的第 n 1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個 d,所以就是 d1 第 2 項是 1 個 d 對應 d1 和 1 個 1 對應 1...