PAT Basic 1084. 外觀數(shù)列 (C語(yǔ)言實(shí)現(xiàn))

我的PAT系列文章更新重心已移至Github变丧,歡迎來(lái)看PAT題解的小伙伴請(qǐng)到Github Pages瀏覽最新內(nèi)容。此處文章目前已更新至與Github Pages同步狡蝶。歡迎star我的repo庶橱。

題目

外觀數(shù)列是指具有以下特點(diǎn)的整數(shù)序列:

d, d1, d111, d113, d11231, d112213111, ...

它從不等于 1 的數(shù)字 d 開(kāi)始,序列的第 n+1 項(xiàng)是對(duì)第 n 項(xiàng)的描述贪惹。比如第 2 項(xiàng)表示第 1 項(xiàng)有 1 個(gè) d苏章,所以就是 d1;第 2
項(xiàng)是 1 個(gè) d(對(duì)應(yīng) d1)和 1 個(gè) 1(對(duì)應(yīng) 11)馍乙,所以第 3 項(xiàng)就是 d111。又比如第 4 項(xiàng)是 d113垫释,其描述就是 1 個(gè)
d丝格,2 個(gè) 1,1 個(gè) 3棵譬,所以下一項(xiàng)就是 d11231显蝌。當(dāng)然這個(gè)定義對(duì) d = 1 也成立。本題要求你推算任意給定數(shù)字 d 的外觀數(shù)列的第
N 項(xiàng)订咸。

輸入格式:

輸入第一行給出 [0,9] 范圍內(nèi)的一個(gè)整數(shù) d曼尊、以及一個(gè)正整數(shù) N( \le 40),用空格分隔脏嚷。

輸出格式:

在一行中給出數(shù)字 d 的外觀數(shù)列的第 N 項(xiàng)骆撇。

輸入樣例:

1 8

輸出樣例:

1123123111

思路

我說(shuō)過(guò)遇到一些數(shù)學(xué)性比較強(qiáng)的題目會(huì)給出比較嚴(yán)謹(jǐn)?shù)恼f(shuō)明,看到這題父叙,我要收回這句話神郊。。

因?yàn)檫@道題我求不出一個(gè)比較小的字符串長(zhǎng)度下限啊趾唱,根本不會(huì)分析涌乳。。甜癞。

不過(guò)幸好輸入的可能情況很少夕晓,在自己寫的時(shí)候嘗試一下就好了。

大致思路:

這道題要求解一個(gè)遞推的序列悠咱,遞推關(guān)系和上一個(gè)數(shù)中數(shù)字的出現(xiàn)模式相關(guān)蒸辆。邏輯上還是好理解的,實(shí)現(xiàn)上也不是很難析既。我的思路是這樣的:

  • 用兩個(gè)字符串做存儲(chǔ)吁朦,交替地存放新產(chǎn)生的遞歸序列
  • 用兩個(gè)指針?lè)謩e指向代表第k個(gè)和第k+1個(gè)序列的字符串,這樣交替的時(shí)候交換字符串就可以了
  • 共N-1次(因?yàn)樽畛醯乃阈蛄械牡谝粋€(gè))掃描第k個(gè)字符串渡贾,同時(shí)生成第k+1個(gè)逗宜。具體為:
    • 初始化計(jì)數(shù)變量
    • 從第一個(gè)字符開(kāi)始向后遍歷第k個(gè)字符串,直到最后一個(gè)字符
      • 我先增加了計(jì)數(shù)變量,因?yàn)槲沂菑?開(kāi)始計(jì)數(shù)的纺讲,因此任何情況都要增加計(jì)數(shù)
      • 比較該字符和后一個(gè)字符擂仍,看是否相等:相同的話,上面已增加過(guò)計(jì)數(shù)熬甚,什么都不做逢渔;不相同的話,向另一個(gè)字符串里記錄該字符和出現(xiàn)次數(shù)乡括,并重置計(jì)數(shù)

思考:

關(guān)于字符串長(zhǎng)度: 這個(gè)題目很難分析需要多長(zhǎng)的字符串肃廓,不過(guò)輸入只可能有0-9十種數(shù)字和1-40的N值,因此只需讓N=40時(shí)诲泌,字符串足夠長(zhǎng)就夠了盲赊。我測(cè)試的結(jié)果是:

  • d = 1, N = 40: 結(jié)果長(zhǎng)63139個(gè)字符
  • d取其它, N = 40: 結(jié)果長(zhǎng)73393個(gè)字符

所以我就開(kāi)了長(zhǎng)度為100 000的字符串。

關(guān)于算法的設(shè)計(jì): 這道題我第一感覺(jué)其實(shí)是不需要開(kāi)數(shù)組敷扫,因?yàn)槊看芜f歸過(guò)程僅需要知道局部的信息即可哀蘑,不需要對(duì)整體的信息進(jìn)行整理。但是問(wèn)題是這道題需要多次利用已生成的結(jié)果作為新的數(shù)據(jù)進(jìn)行處理葵第,所以一定要把結(jié)果保留下來(lái)才可以進(jìn)行多次的遞歸绘迁。至少我是覺(jué)得這道題一定要開(kāi)數(shù)組進(jìn)行存儲(chǔ)才可以。

代碼

最新代碼@github卒密,歡迎交流

#include <stdio.h>

int main()
{
    int N, count;
    char string1[100000] = {0}, string2[100000] = {0};
    char *s1 = string1, *s2 = string2, *temp;
    char *p1, *p2;

    scanf("%s %d", s1, &N);

    for(int i = 1; i < N; i++)  /* Loop through nth string */
    {
        for(p1 = s1, p2 = s2, count = 0; *p1; p1++)
        {
            count++;    /* Magic, don't touch! */
            if(*p1 != *(p1 + 1))        /* New char or end */
            {
                *p2++ = *p1;            /* Record character */
                *p2++ = count + '0';    /* Record count */
                count = 0;              /* Reset count */
            }
        }
        /* Swap */
        temp = s1, s1 = s2, s2 = temp;
    }

    puts(s1);

    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缀台,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哮奇,更是在濱河造成了極大的恐慌将硝,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屏镊,死亡現(xiàn)場(chǎng)離奇詭異依疼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)而芥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門律罢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人棍丐,你說(shuō)我怎么就攤上這事误辑。” “怎么了歌逢?”我有些...
    開(kāi)封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵巾钉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我秘案,道長(zhǎng)砰苍,這世上最難降的妖魔是什么潦匈? 我笑而不...
    開(kāi)封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮赚导,結(jié)果婚禮上茬缩,老公的妹妹穿的比我還像新娘。我一直安慰自己吼旧,他們只是感情好凰锡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著圈暗,像睡著了一般掂为。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上员串,一...
    開(kāi)封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天勇哗,我揣著相機(jī)與錄音,去河邊找鬼昵济。 笑死智绸,一個(gè)胖子當(dāng)著我的面吹牛野揪,可吹牛的內(nèi)容都是我干的访忿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼斯稳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼海铆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起挣惰,我...
    開(kāi)封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卧斟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后憎茂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體珍语,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年竖幔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了板乙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拳氢,死狀恐怖募逞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馋评,我是刑警寧澤放接,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站留特,受9級(jí)特大地震影響纠脾,放射性物質(zhì)發(fā)生泄漏玛瘸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一乳乌、第九天 我趴在偏房一處隱蔽的房頂上張望捧韵。 院中可真熱鬧,春花似錦汉操、人聲如沸再来。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芒篷。三九已至,卻和暖如春采缚,著一層夾襖步出監(jiān)牢的瞬間针炉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工扳抽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篡帕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓贸呢,卻偏偏與公主長(zhǎng)得像镰烧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子楞陷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,345評(píng)論 0 2
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,383評(píng)論 0 5
  • 在弄scala 關(guān)于scala問(wèn)題 maven install 編譯不了scala 添加 scala 插件 ...
    Truman_9d15閱讀 193評(píng)論 1 0
  • 本文轉(zhuǎn)自阿飛的博客 很多同學(xué)都問(wèn)過(guò)這個(gè)問(wèn)題怔鳖,為什么我的Xmx設(shè)置4g,但是TOP命令查詢RES卻占用5G固蛾,6G结执,甚...
    美團(tuán)Java閱讀 12,746評(píng)論 4 36
  • 不知不覺(jué),一學(xué)期又過(guò)去了大半艾凯,這個(gè)帶著軍訓(xùn)的一學(xué)期格外漫長(zhǎng)卻又轉(zhuǎn)瞬即逝地消逝著献幔,從大夏天到悄然而至的冬天,我衣服還...
    指掌閱讀 216評(píng)論 0 0