1084 外觀數列 20分 附加思路

2021-10-09 07:13:55 字數 1259 閱讀 6853

外觀數列是指具有以下特點的整數序列:

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...