#include <stdio.h> #include <string.h> char c[101]={'\0'},s[101]={'\0'}; int round,fail=0,lose=0; int main(){ while(scanf("%d",&round)!=-1){ if(round==-1)break; printf("Round %d\n",round); scanf("%s",&s); //solution scanf("%s",&c); //string to guess lose=0; for(int i=0;i<100;i++){ fail=1; //set fail = 1 for(int j=0;j<100;j++){ if(c[i]==s[j]){ fail=0; //有檢查到相同的字元,則本次猜測成功,fail設為0 s[j]='\0'; //將被猜到的相同字元都換成'\0' } } if(fail==1)lose++; //沒檢查到相同字元,本次猜測失敗,lose++ char check = c[i]; //將原字串內本次猜測的字都換為'\0',避免重複猜測 for(int j=0;j<100;j++) if(c[j]==check)c[j]='\0'; //如果失敗次數>=7次,輸出You lose. if(lose>=7){ printf("You lose.\n"); break; } else { //這裡很重要,目前失敗還沒七次的話,趕緊檢查是否已經猜到全部的字了 int win=1; for(int i=0;i<100;i++){ if(s[i]!='\0'){ win=0; //如果被檢查的字串裡還有剩餘沒猜到的字,win設為0 break; } } if(win==1){ //如果都檢查到了,win=1,輸出You win. printf("You win.\n"); break; } } } //判斷最後的狀況,有剩字沒檢查且lose次數<7,輸出You chickened out. for(int i=0;i<100;i++){ if(s[i]!='\0'&&lose<7){ printf("You chickened out.\n"); break; } } //重新初始化陣列 for(int i=0;i<100;i++){ c[i]='\0'; s[i]='\0'; } } return 0; }
2014年8月30日星期六
[UVa] 489 - Hangman Judge
訂閱:
發佈留言 (Atom)
-
因為先前寫UVa時,檔案名稱有時會花心思改,有時就直接把題目名稱加上.cpp就貼上了 導致現在有不同的格式出現 現在要處理的事情很簡單 1. 去除空白 2. 將底線 ( _ ) 換成dash ( - ) 經過一番查詢,終於發現最簡單的方法 - re...
-
文章出處: http://infbugs.blogspot.tw/2011/12/c_20.html 謝謝沙耶,解答了我長久以來對於 input/output 的疑惑。 C 語言入門 - 在線上批改系統練功 如何練習使用基本語法 自己出個練習題試著寫...
-
一開始用數學方法推斷得出,設輸入為n k為在n的前一斜線列數,故只要找到 (1+k)*k/2 < n 的最大k值,即可判定 k%2 == 1 => ((2*n)-(k*k)-k)/2 / ((k*k)+(3*k)-(2*n)+4)/2 k%2 ==...
沒有留言:
發佈留言