思路很简单,题目中说猜对目标字母中的一个字母,就会将所有该字母的位置显现,因此,可以对目标字符进行筛选去重,然后对输入猜测的每个字母进行比对,由于不能猜已经猜过的字母,因此,要对成功猜出的目标字母进行去除(这里用&来去除该字母)
得到的答案有三种:
“you win”代表在错误次数小于七次的时候就已经成功猜测;
“you lose”表示错误次数已经大于七次;
you chickened out”在错误在七次之内且字母并未完全猜出时,猜测的字母已经用尽,即此时仍有猜测机会,但是没有输入字母;
代码如下,
#include<bits/stdc++.h>
using namespace std;
void judge(string s, string t) {
int number[26] = {0};
int n = s.length();
for (int i = 0; i < n; i++) {
number[(int)(s[i] - 'a')]++;
}
char q[26];
memset(q, '\0', sizeof(q));
int k = 0;
for (int i = 0; i < 26; i++) {
if (number[i] != 0) {
q[k] = (char)( i + 'a' );
k++;
}
}
int f = 0;
int flag = 0;
int l, m;
l = t.length();
m = strlen(q);
int mid = 0;
for (int i = 0; i < l; i++) {
for (int j = 0; j < m; j++) {
if (t[i] == q[j]) {
q[j] = '&';
flag++;
mid = 1;
}
}
if (mid == 1) {
mid = 0;
} else {
f++;
}
if (f == 7) {
break;
}
if (flag == m) {
break;
}
}
if (flag == m && f <= 7) {
cout << "You win." << endl;
} else if (f < 7 && flag < m) {
cout << "You chickened out." << endl;
} else if (flag < m) {
cout << "You lose." << endl;
}
}
int main() {
string s, t;
int l;
while (cin >> l ) {
if (l == -1) {
break;
} else {
cin >> s >> t;
cout << "Round " << l << endl;
judge(s, t);
}
}
return 0;
}