謎題(Puzzle UVa227)

剛看的這個題目的時候感覺挺簡單的(事實也是如此)询兴,自己的想法就是用一個二維的字符數組儲存方格,然后用一個swich來判斷不同的命令就可以了梆靖。思路很簡單但是寫起來居然花了我這么多時間教沾。
  這題的難點主要在于字符的輸入和輸出,如果這兩個事情處理好了基本上就沒有什么問題了满着。
  我遇到的問題如下:

  1. 除了超出方格范圍的命令外,遇到ABLR之外的命令也為非法命令
  2. 命令可能不在同一行贯莺,所以不能用字符串來儲存(我開始就是這么做的)需要逐個讀确缋(注意每行后面的換行符)。
  3. 遇到非法命令后不但需要終止讀取缕探,也需要將后面的命令從輸入緩沖區(qū)中清空魂莫,防止干擾到下一次方格的輸入。
  4. 輸出的最后一行沒有空行爹耗,中間需要用空行隔開(這里要感謝梁山博的博客)耙考,不然會報Presentation error。(uDbug上的測試用例的answer不知道為什么最后的答案有空行潭兽,坑了我好久倦始,但是不可否認是個非常好的網站)

大概問題就是這些了,遇到字符輸入特別是單個字符輸入一定要謹慎一點山卦,好了不多說了下面貼一下代碼鞋邑。

#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
    //ifstream fin;
    //fin.open("data.txt");
    //cin.rdbuf(fin.rdbuf());
    //ofstream out;
    //out.open("data.out");
    //cout.rdbuf(out.rdbuf());

    char a[5][5];                    //二維數字表示拼圖
    int key = 1,t=0;
    while (cin.get(a[0][0])&&a[0][0]!='Z')
    {
        if (++t>1)                                 //用來控制輸出中的空行,首行前和最后一行后無空行账蓉,輸出用空行隔開
            cout << endl;
        int c = 0, d = 0;            //用來標記空白的位置
        for (int i = 0; i < 5; ++i)
        {
            for (int j = 0; j < 5; ++j)
            {
                if (!i && !j)continue;
                cin.get(a[i][j]);
                if (a[i][j] == ' ')
                    c = i, d = j;
            }
            cin.get();                                          //讀取行尾的回車符
        }

    
        int i = 0;
        cout << "Puzzle #" << key++ <<':'<< endl;
        int flag = 0;                                          //標記是否遇到非法命令
        char s;
        while (cin.get(s) && s != '0')                           //模擬空格的移動枚碗,注意命令可能不在同一行
        {
            if (flag == 1 || s == '\n') continue;                
            switch (s)
            {
            case 'A': if (c - 1 < 0)
            {
                flag = 1;
                break;
            
            }
                      else
                      {
                          a[c][d] = a[c - 1][d];
                          a[c - 1][d] = ' ';
                          c -= 1;
                          break;
                      }
            case 'B': if (c + 1 > 4)
            {
                flag = 1;
                break;
            }
                      else
                      {
                          a[c][d] = a[c + 1][d];
                          a[c + 1][d] = ' ';
                          c += 1;
                          break;
                      }
            case 'L': if (d - 1 < 0)
            {
                flag = 1;
                break;
            }
                      else
                      {
                          a[c][d] = a[c][d - 1];
                          a[c][d - 1] = ' ';
                          d -= 1;
                          break;
                      }
            case 'R': if (d + 1 > 4)
            {
                flag = 1;
                break;
            }
                      else
                      {
                          a[c][d] = a[c][d + 1];
                          a[c][d + 1] = ' ';
                          d += 1;
                          break;
                      }
            default:              //遇到回車或者指定命令外的字母也為非法命令
                flag = 1;
                break;
            }
                
        }
        cin.get();              //去掉零后面的回車符
            
        if (flag)
        {
            cout << "This puzzle has no final configuration." << endl;
        }
        else
        {
            for (int i = 0; i < 5; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    cout << a[i][j]<<' ';
                }
                cout <<a[i][4]<< endl;                              
            }
        }
    }
    return 0;

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铸本,隨后出現的幾起案子肮雨,更是在濱河造成了極大的恐慌,老刑警劉巖箱玷,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怨规,死亡現場離奇詭異,居然都是意外死亡汪茧,警方通過查閱死者的電腦和手機椅亚,發(fā)現死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舱污,“玉大人呀舔,你說我怎么就攤上這事。” “怎么了媚赖?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵霜瘪,是天一觀的道長。 經常有香客問我惧磺,道長颖对,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任磨隘,我火速辦了婚禮缤底,結果婚禮上,老公的妹妹穿的比我還像新娘番捂。我一直安慰自己个唧,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布设预。 她就那樣靜靜地躺著徙歼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳖枕。 梳的紋絲不亂的頭發(fā)上魄梯,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音宾符,去河邊找鬼酿秸。 笑死,一個胖子當著我的面吹牛魏烫,可吹牛的內容都是我干的允扇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼则奥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狭园?” 一聲冷哼從身側響起读处,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唱矛,沒想到半個月后罚舱,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡绎谦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年管闷,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窃肠。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡包个,死狀恐怖,靈堂內的尸體忽然破棺而出冤留,到底是詐尸還是另有隱情碧囊,我是刑警寧澤树灶,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站糯而,受9級特大地震影響天通,放射性物質發(fā)生泄漏。R本人自食惡果不足惜熄驼,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一像寒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓜贾,春花似錦诺祸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至实束,卻和暖如春奥秆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咸灿。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工构订, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人避矢。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓悼瘾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親审胸。 傳聞我的和親對象是個殘疾皇子亥宿,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數據革命閱讀 12,146評論 2 34
  • Ubuntu的發(fā)音 Ubuntu碍庵,源于非洲祖魯人和科薩人的語言映企,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,204評論 9 467
  • 本文承接之前寫的三十分鐘學會AWK一文静浴,在學習完AWK之后堰氓,趁熱打鐵又學習了一下SED,不得不說這兩個工具真的堪稱...
    mylxsw閱讀 4,391評論 3 74
  • “孤獨”對大多數人來說是需要對抗的東西苹享。隔離双絮、空蕩、虛無、惶恐 于是我們主動交出許多時間掷邦,交給家人白胀、朋友、工作抚岗。 ...
    云飛贏家學堂童子軍閱讀 371評論 0 0
  • 成熟的人十分敏銳或杠,就像聽交響樂的不同樂章。不論謝是熱情奔放宣蔚,還是柔和舒緩向抢,他都能體察到細微的起伏。而大多數人...
    素樸之行閱讀 2,666評論 0 0