chickende了,因为这个拼写错误,无限次的WA,搞的这两天无比郁闷。
这题不是难题,本来觉得可以一次AC的,结果困了这么久,这就像打对战游戏时,你和一个高手打,被高手虐的死去活来,可能也不会觉得有什么,顶多觉得:唉,和高手差距太远啦!
但是如果和一个与你水平差不多的,甚至比你还水的对手打,结果被虐的死去活来的时候,你会做何感想呢?反正我是想砸电脑!下面代码中的错误就不更正了,以警示自己和来人!
/**Author: Gneveek * Data: 2011-9-29 * Descripition: UVa - 489 Hangman Judge */ #include <stdio.h> #include <string.h> #define MAXN 1000 #define TRUE 1 #define FALSE 0 int is_exist(char str[], char c); int main() { int n,i,j,right,wrong; //right存放猜正解的字符的个数,最后和正确的字符串的长度相比,如果相等就认为全猜对了;wrong记猜错的次数 int alen,blen; //a[] 和 b[]的长度 int flag; char a[MAXN],b[MAXN]; while(scanf("%d",&n) && n != -1) { right = wrong = i = j = 0; getchar(); //clear '\n' gets(a); gets(b); alen = strlen(a); blen = strlen(b); for(i=0; i<blen; i++) { //如果错误次数大于等于7 或者 正确的字母数等于答案串的长度,退出for 循环 if(wrong >= 7 || right == alen) break; flag = FALSE;//初始化flag,标记第二个串中当前字符是否在前面出现过,比如chese当扫描到第二个e时,就设置flag = true for(j=0; j<i; j++) { if(b[j] == b[i]){ flag = TRUE; break; } } if(flag) continue; //如果重复就continue,进入下一次循环 //上面已经排除了重复的字符,下面直接判断 if(is_exist(a,b[i]) == 0) wrong++; else right += is_exist(a,b[i]); //函数返回猜中字符的个数 } //根据情况打印3种不同的结果 printf("Round %d\n",n); if(wrong >= 7) printf("You lose.\n"); else if(right == alen) printf("You win.\n"); else printf("You chickende out.\n"); } return 0; } int is_exist(char str[], char c) { int i,count = 0; for(i=0; i<strlen(str); i++) if(str[i] == c) count++; return count; }