給出一個單詞讓你猜,你每次可以猜一個字母。如果單詞里有那個字母,所有該字母會顯示出來;如果沒有那個字母,則會在一幅“劊子手”畫上填一筆。這幅畫一共需要7筆就能完成,因此你最多只能錯6次。猜一個已經猜過的字母也算錯。 給你要猜的字母和所猜的字母序列,請你判斷游戲結果。
這一題和上面那題挺相似的,還是用一個長度為26的數組做一個映射,記錄分字符串中字母A到Z出現的次數。而在猜的過程中,如果猜對了就將這個字母對應的記錄改為0,如果所猜的字母對應的記錄為0,則說明這次猜錯了。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1e4 + 5;#define met(a, b) memset(a, b, sizeof(a));int n, cnt[26];char a[maxn], b[maxn];char ot[][50] = {"You win.", "You chickened out.", "You lose."};int main() { #ifdef _LOCAL freopen("in.txt", "r", stdin); #endif while(scanf("%d", &n) && n != -1) { scanf("%s%s", a, b); int la = strlen(a), lb = strlen(b); met(cnt, 0); int ret = 0, ans = 0; for(int i = 0; i < la; ++i) ++cnt[a[i]-'a']; for(int i = 0; i < lb && la > 0; ++i) { if(cnt[b[i]-'a'] != 0) la -= cnt[b[i]-'a'], cnt[b[i]-'a'] = 0; else ++ret; if(ret >= 7) {ans = 2; break; } } if(la > 0 && ret < 7) ans = 1;新聞熱點
疑難解答