題目: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 您輸入有誤!第...