算法竞赛入门经典(紫书)第四章——Hangman Judge UVA-489

xiaoxiao2021-02-28  45

题意: 介绍了一种游戏,给出一个字符串,然后让玩家去猜这个字符串中出现了哪些字母。

如果猜错 7 次就 lose(猜对过的字母再猜也算错,比如原串是 cheese,第一次猜 e,对;第二次再猜 e,错)。如果字符串中出现的字母都被猜了一遍,那么就 win 了。如果猜完了也没 win 也没 lose,就是 chickened out。

现在给两个字符串,第一个字符串可以看作是原串,第二个字符串是游戏玩家的猜测。

思路: 读取两个字符串,处理出原串中含有的字母(可以用 bool 数组实现)以及种数(循环过程中记录)。然后检查猜测串并作出相应判断。

注意: 主要是细心吧,一些细节方面注意。

代码:

#include<cstdio> #include<cstring> #include<cstdlib> #include<stack> #include<queue> #include<utility> #include<vector> #include<cmath> #include<set> #include<map> #include<iostream> #include<algorithm> #include<sstream> using namespace std; typedef long long LL; int num; char ch[1010]; char gue[1010]; bool alph[30]; int main() { //freopen("in.txt", "r", stdin); while(scanf("%d", &num)==1 && num!=-1){ memset(alph, false, sizeof(alph)); printf("Round %d\n", num); scanf("%s%s", ch, gue); int cnt = 0; //记录有几种字母 int len1 = strlen(ch); int len2 = strlen(gue); for(int i=0; i<len1; i++){ if(!alph[ch[i]-'a']){ alph[ch[i]-'a'] = true; cnt++; } } int flag = 0; //记录是哪种结果 int wt = 0; //记录错误次数 for(int i=0; i<len2; i++){ if(!alph[gue[i]-'a']){ wt++; if(wt >= 7){ flag = 2; break; } }else{ alph[gue[i]-'a'] = false; cnt--; if(cnt == 0){ flag = 1; break; } } } if(cnt!=0 && flag==0){ flag = 3; } switch(flag){ case 1: printf("You win.\n"); break; case 2: printf("You lose.\n"); break; case 3: printf("You chickened out.\n"); break; } } return 0; }

想看书上的源代码的话看这 (^▽^) https://github.com/aoapc-book/aoapc-bac2nd

转载请注明原文地址: https://www.6miu.com/read-2627587.html

最新回复(0)