PAT乙 1084 外觀數列

2021-08-26 12:26:22 字數 1299 閱讀 5204

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

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
解析:這題有倆個地方很關鍵,一是整數d屬於[0,9]第二個地方就是n<40.這代表著我們並不需要多麼複雜的演算法優化空間時間簡單的暴力求解就可以解決這題和字串壓縮解壓類似,從頭開始遍歷,遇到相同字元時cnt+1,否則就儲存已經連續幾個相同字元。要注意最後要判斷cnt是否大於0,防止字串從頭到尾都相等。

#includeusing namespace std;

int main()

} if(cnt > 0)

a = ans;

} cout << a <分析:用string s接收所需變幻的數字,每次遍歷s,從當前位置i開始,看後面有多少個與s[i]相同,設j處開始不相同,那麼臨時字串t += to_string((s[i] – 『0』) * 10 + j – i);然後再將t賦值給s,cnt只要沒達到n次就繼續加油迴圈下一次,最後輸出s的值~

#include using namespace std;

int main()

s = t;

}cout << s;

return 0;

}

pat乙1084 外觀數列 測試點4

include include using namespace std string str 40 int main else str i pre str i to string cns cout 最後測試點主要的坑點是超時。如果輸出第40項的時候printf輸出在我的編譯器上大約是7秒,cout的...

PAT 1084 外觀數列

1084 外觀數列 20 分 外觀數列是指具有以下特點的整數序列 d,d1,d111,d113,d11231,d112213111,它從不等於 1 的數字 d 開始,序列的第 n 1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個 d,所以就是 d1 第 2 項是 1 個 d 對應 ...

PAT乙級 1084 外觀數列

外觀數列是指具有以下特點的整數序列 d,d1,d111,d113,d11231,d112213111,它從不等於 1 的數字d開始,序列的第 n 1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個d,所以就是d1 第 2 項是 1 個d 對應d1 和 1 個 1 對應 11 所以第 ...