2014年8月30日星期六

[UVa] 489 - Hangman Judge

#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;
} 

沒有留言: