UVa213 - Message Decoding

這是書上一條例題昂验,那個覺得有意思就也寫一下心得

題目

UVa213

講解與心得

首先從輸入入手

輸入每次輸入有三部分液样,分別是:編碼頭code(一串字符串且含空格)祟剔,編碼文件小節(jié)長度len(只含有1挚歧、0)于宙,以及編碼文件內(nèi)容(只含有1浮驳、0)。所以一共需要三個循環(huán)捞魁,每個循環(huán)對應一部分至会。

第一部分

讀入code[ len ][value],用一個函數(shù)readcode裝起來谱俭,放在 while 循環(huán)的條件里面奉件。當讀到EOF的時候返回0結(jié)束循環(huán)。函數(shù)內(nèi)部第一個細節(jié)是第一個字符用 readchar (自定義函數(shù))讀入昆著,防止讀到回車鍵县貌。剩下的用兩層循環(huán)getchar讀入即可。

第二部分

readint (自定義函數(shù))讀入三位二進制凑懂,len煤痕。如果len為 0 則跳出循環(huán)。然后到下一層接谨。reading 的讀入可以類比十進制杭攻,我們總是把用來的數(shù) * 10 再加上剛讀入的低位加上來獲得新值;2進制同理疤坝,只是換成了乘以 2兆解。

第三部分

reading(len) 讀入len位的二進制轉(zhuǎn)十進制 v,如果為2^len - 1 則跳出循環(huán)跑揉,否則直接打印 code[len][v]锅睛。因為 len 位全 1 的 2 進制 +1 剛好等于 2 ^(len+1) 。

筆者的失誤

一開始寫 readcode 最后的返回值寫成了0历谍,所以wa了....
顯然是因為我沒有考慮如果把 code 讀滿了的情況现拒。

代碼

#include <stdio.h>
#include <string.h>

int code[8][1<<8];

int readint(int l);   //讀入一個l位的二進制并返回十進制
int readchar();    //跳過回車讀入
int readcodes();   //讀入編碼頭

int main() {
#ifdef TEST
    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);
#endif // TEST
    while (readcodes()) {
        for (;;) {
            int len = readint(3);
            if (len == 0) break;
            for (;;) {
                int v = readint(len);
                if (v == (1 << len) - 1) break;
                putchar(code[len][v]);
            }
        }
        printf("\n");
    }
    return 0;
}

int readint(int len){
    int v = 0;
    while (len--) v = v * 2 + readchar() - '0';
    return v;
}

int readchar(){
    for (;;) {
        int ch = getchar();
        if (ch != '\n' && ch != '\r') return ch;
    }
}

int readcodes(){
    for (int i = 0; i < 8; i++)
        memset(code[i], 0, sizeof(code[i]));
    code[1][0] = readchar();
    for (int len = 2; len < 8; len++) for (int i = 0; i < (1 << len) - 1; i++) {
        int ch = getchar();
        if (ch == EOF) return 0;
        if (ch == '\n' || ch == '\r') return 1;
        code[len][i] = ch;
    }
    return 1;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市望侈,隨后出現(xiàn)的幾起案子印蔬,更是在濱河造成了極大的恐慌,老刑警劉巖脱衙,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侥猬,死亡現(xiàn)場離奇詭異例驹,居然都是意外死亡,警方通過查閱死者的電腦和手機退唠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門鹃锈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞧预,你說我怎么就攤上這事屎债。” “怎么了垢油?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵盆驹,是天一觀的道長。 經(jīng)常有香客問我滩愁,道長召娜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任惊楼,我火速辦了婚禮玖瘸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘檀咙。我一直安慰自己雅倒,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布弧可。 她就那樣靜靜地躺著蔑匣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棕诵。 梳的紋絲不亂的頭發(fā)上裁良,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音校套,去河邊找鬼价脾。 笑死,一個胖子當著我的面吹牛笛匙,可吹牛的內(nèi)容都是我干的侨把。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼妹孙,長吁一口氣:“原來是場噩夢啊……” “哼秋柄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蠢正,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤骇笔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笨触,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡懦傍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旭旭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡葱跋,死狀恐怖持寄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娱俺,我是刑警寧澤稍味,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站荠卷,受9級特大地震影響模庐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜油宜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一掂碱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慎冤,春花似錦瘦穆、人聲如沸例嘱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麸锉。三九已至,卻和暖如春俱萍,著一層夾襖步出監(jiān)牢的瞬間宰缤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工呈队, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剥槐,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓宪摧,卻偏偏與公主長得像才沧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绍刮,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,836評論 0 38
  • error code(錯誤代碼)=0是操作成功完成温圆。error code(錯誤代碼)=1是功能錯誤。error c...
    Heikki_閱讀 3,390評論 1 9
  • 一孩革、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,750評論 0 10
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒岁歉。 unpack() 函數(shù)從二進制字符串對數(shù)據(jù)進行解包。 uni...
    思夢PHP閱讀 1,987評論 1 24
  • 鄭婆又在罵街了。 小街上圍滿了看熱鬧的“閑人” 锅移。 有笑得抹眼淚的熔掺,有用雙手蒙住嘴巴的,有笑得扭曲著腰連站也站不穩(wěn)...
    蘭情二月天閱讀 556評論 8 27