489 - Hangman Judge (UVA)

题目链接如下:

Online Judge

题目中有这么一句:“Each unique wrong guess only counts against the contestant once.” 修改后的代码如下(估计题目测试集有点问题?这一句感觉没测出来):

#include <cstdio>
#include <string.h>
#include <set>
const int maxx = 1000;

int rnd, tot;
char a[maxx], b[maxx];
bool flag;

int main(){
    while(scanf("%d", &rnd) == 1 && rnd != -1){
        printf("Round %d\n", rnd);
        scanf("%s %s", a, b);
        tot = 7;
        std::set<char> st, guessed;
        flag = false;
        for(int i = 0; i < strlen(a); ++i){
            st.insert(a[i]);
        }
        for(int i = 0; i < strlen(b); ++i){
            if(st.find(b[i]) != st.end()){
                st.erase(b[i]);
                if(st.empty()){
                    printf("You win.\n");
                    flag = true;
                    break;
                }
            } else if(guessed.find(b[i]) == guessed.end()){
                tot--;
                guessed.insert(b[i]);
                if(tot == 0){
                    printf("You lose.\n");
                    flag = true;
                    break;
                }
            }
        }
        if(flag){
            continue;
        }
        printf("You chickened out.\n");
    }
    return 0;
}

我原来的代码如下(能AC):

#include <cstdio>
#include <string.h>
#include <set>
const int maxx = 1000;

int rnd, tot;
char a[maxx], b[maxx];
bool flag;

int main(){
    while(scanf("%d", &rnd) == 1 && rnd != -1){
        printf("Round %d\n", rnd);
        scanf("%s %s", a, b);
        tot = 7;
        std::set<char> st;
        flag = false;
        for(int i = 0; i < strlen(a); ++i){
            st.insert(a[i]);
        }
        for(int i = 0; i < strlen(b); ++i){
            if(st.find(b[i]) != st.end()){
                st.erase(b[i]);
                if(st.empty()){
                    printf("You win.\n");
                    flag = true;
                    break;
                }
            } else{
                tot--;
                if(tot == 0){
                    printf("You lose.\n");
                    flag = true;
                    break;
                }
            }
        }
        if(flag){
            continue;
        }
        printf("You chickened out.\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值