题意:
介绍了一种游戏,给出一个字符串,然后让玩家去猜这个字符串中出现了哪些字母。
- 如果猜错 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