算法竞赛入门经典(第二版) | 例题4-2 刽子手游戏 (UVa489,Hangman Judge)
大家站在出題者的角度考慮,我們出了一道大水題,會(huì)讓它又臭又長(zhǎng)或是用復(fù)雜的函數(shù)嗎? 不會(huì)。所以做這種題千萬(wàn)不要想得太復(fù)雜。循環(huán)+數(shù)組足矣。
提目(提交)鏈接→UVa-489
百度翻譯→百度翻譯
沒(méi)使用過(guò)該網(wǎng)站的同學(xué)請(qǐng)猛戳這里→vJudge教程
輸入輸出規(guī)則
按題給句子輸出即可,每個(gè)輸出之間沒(méi)有空行。
測(cè)試規(guī)則
1.錯(cuò)7次則lose。
2.猜一個(gè)已經(jīng)猜過(guò)的(無(wú)論是正確的還是錯(cuò)誤的字母),都算錯(cuò)。
3.若已經(jīng)全部猜出,之后即使亂輸入使得錯(cuò)誤大于7次,也算win。
分析:
按ASIⅡ定義a[127]與b[127],賦0,遍歷輸入,若a數(shù)組角標(biāo)=正確單詞中字母的ASIⅡ,則將此數(shù)組值賦1。
正確單詞存入a數(shù)組后,輸入猜測(cè)序列,用b數(shù)組表示,若b數(shù)組角標(biāo)=a數(shù)組角標(biāo),則計(jì)數(shù)器sum1++;若不等于,或重復(fù)輸入,則sum2++;
最后,
如果sum1=a數(shù)組不重復(fù)元素個(gè)數(shù),則贏。
若sum2 >= 7 則輸
若sum2 < 7 則棄權(quán)。
代碼:
#include <iostream> #include <cstring> using namespace std ; int main() {int a[130], b[130]; //答案、輸入數(shù)組 int i; //計(jì)數(shù)器 while((cin>>i) && (i != -1)) { //少定義一個(gè)i變量,利用a數(shù)組空余空間賦值 memset(a,0,sizeof(a));memset(b,0,sizeof(b)); //賦0。 char c;int k1 = 0 ; //正確單詞無(wú)重復(fù)的個(gè)數(shù) int k2 = 0 ; //計(jì)數(shù)器//輸入: getchar() ; //吸收1之后的回車。 while((c = getchar()) && (c != '\n')) //輸入a數(shù)組 if(a[c] == 0 ) {a[c]++; k1++; }int num = 0;while((c = getchar()) && (c != '\n')) {b[c]++;if((a[c] == b[c]) && (a[c] <= 1) && (num < 7 )) { //若有正確答案的字母且之前沒(méi)輸入過(guò) a[c]++; k2++; } else num++ ; }//輸出cout << "Round" << ' ' << i << endl ; if(k1 == k2) cout << "You win." << endl;else if(num >= 7) cout << "You lose." << endl;else if(num < 7) cout << "You chickened out." << endl ;}return 0 ; }收獲:
1、本題運(yùn)用了兩個(gè)算法:查表、在線處理。
2、在動(dòng)鍵盤之前,要總結(jié)出該題的輸入輸出格式與測(cè)試規(guī)則。悔棋很麻煩的!
最后分享一條大牛的建議(對(duì)筆者受益匪淺):算法最好有人帶著學(xué),如果條件不允許,一定要到網(wǎng)絡(luò)上廣泛交流、學(xué)習(xí)。
總結(jié)
以上是生活随笔為你收集整理的算法竞赛入门经典(第二版) | 例题4-2 刽子手游戏 (UVa489,Hangman Judge)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 算法竞赛入门经典(第二版) | 习题3-
- 下一篇: 算法竞赛入门经典(第二版) | 例题4-