紫書第三章課後習題 UVa227

2021-08-19 22:39:00 字數 2036 閱讀 4887

題目:uva227

題解:

題意很簡單,就是找出空著的那個格仔,對其進行相應的操作。思路也都很清晰,就是單純的模擬就可以,而操作只有四種,也都很簡單,就是簡單的交換就行,不過任何一次交換之後都要記得記錄空格的位置。

不過在實現的過程中,還是碰到了不少問題,花了不少時間除錯、找bug。根源還是自己對字元的操作不是很清晰。因為這題每行都會有乙個空格,所以不能簡簡單單地用cin讀取,因為cin讀到空格就會自動停止,我然後採用了getline(cin,str)這個函式。

程式設計技巧:

①  由於cin無法讀入含有空格的字串,故採用getline()函式讀入一整行。

getline函式介紹:

getline不是c

庫函式,而是

gcc的擴充套件定義或者

c++庫函式(需要

string

標頭檔案)

,它會生成乙個包含一串從輸入流讀入的字元的字串,直到以下情況發生會導致生成的此字串結束。

1)到檔案結束,

2)遇到函式的定界符,

3)輸入達到最大限度。

getline(cin,s)預設以』\n』作為輸入結束符(\n不讀入)。

getline(cin,s,ch)以字元ch作為輸入結束符(ch不讀入)。

區分cin.getline函式:cin.getline()

屬於istream

流,而getline()

屬於string

流,是不一樣的兩個函式

cin.getline(s,5):預設以『\n』作為輸入結束符,讀入4個字元。

cin.getline(s,5,ch):以ch作為輸入結束符,讀入4個字元。

具體可以參見:

更具體(含有get函式)可以看:

注意點:

①  在操作時,可能會出現『a』、『b』、』r』、』s』之外的字元,而四種操作外的其他作均要視為非法操作

②  千萬不要忘了標誌結束字元『0『之後還有乙個換行操作,應該用乙個getchar將其讀進記憶體。

ac**:

#includeusing namespace std;

string s;

char ch[5][5];

int error;

int x,y;

void init()

void swap(int x1,inty1,int x2,int y2)

void move(char ch)else error = 1; ///此時位置若是還是進行這個操作,將越界

break;

case 'b':

if(x != 4)else error = 1; ///此時位置若是還是進行這個操作,將越界

break;

case 'l':

if(y != 0)else error = 1; ///此時位置若是還是進行這個操作,將越界

break;

case 'r':

if(y != 4)else error = 1; ///此時位置若是還是進行這個操作,將越界

break;

default:

error = 1; ///四種操作外的其他操作均視為非法操作

}} int main()

}for(int i = 1;i < 5;++i)}}

char c;

error = 0;

while(scanf("%c",&c))

getchar(); ///!!!千萬不要忘了標誌結束字元『0『之後還有乙個換行操作!!!

printf("puzzle#%d:\n",cnt++);

if(error)else

}return 0;

}

紫書章三習題5 UVA 227 Puzzle

這道題,主要學習了 1.怎麼將 寫的好看 簡潔 之前 都是冗長冗長的,能不動腦子就不動腦子。switch,2.freopen d input.txt r stdin 的運用,提交的時候一定要加 3.fgets 陣列,maxn,stdin 輸入到陣列中,長度為不超過maxn 1,然後在末尾加上 0,所...

第三章課後總結

字單元,即存放乙個字型資料 16位 的記憶體單元,由兩個位址連續的記憶體單元組成。高位址記憶體單元中存放字型資料的高位位元組,低位址記憶體單元中只能存放字型資料的低位位元組。指令 mov 暫存器,是ds暫存器中偏移位址。的資料 8086不支援將資料直接送入段暫存器的操作 只能先將資料送入乙個一般暫存...

第三章課後練習題

第一題 根據成績輸出評分 s float input 請輸入成績 if s 90 print a elif 89 s 80 print b elif 79 s 70 print c elif 69 s 60 print d elif 60 s 0 print e else print 您輸入有誤!第...