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