UVa 489,紫书P79,刽子手游戏

题目链接:https://uva.onlinejudge.org/external/4/489.pdf

这个题很像之前的一个拓扑排序的题目,思路类似咯。

程序模块化:

每次判断一个字母,lose,win确定就直接退出。

小技巧:

你可以用数组guess[]记录每个字母是否访问过。要是已经访问过,counts++,算是一种错误。

这里汝佳的小技巧是,每次把相同的字符赋值为‘ ’,记录一下str1的长度,查完str1就win。否则就是You chickened out.

#include <stdio.h>
#include <string.h>

int win ,lose;
int left;
int counts = 0;
char str1[110],str2[110];

void guess(char ch)
{
    bool flag = false;
    for(int i=0;i<strlen(str1);i++)
    {
        if(ch==str1[i])
        {
            str1[i] = ' ';
            flag = true;
            left--;
        }
    }
    if(!flag) counts++;
    if(counts>6) lose = 1;
    if(left==0) win = 1;
}

int main()
{
    freopen("input.txt","r",stdin);
    int cases;
    while(scanf("%d",&cases))
    {
        counts = 0;
        if(cases==-1) break;
        printf("Round %d
",cases);
        scanf("%s%s",str1,str2);
        win = lose = 0;

        left = strlen(str1);
        for(int i=0;i<strlen(str2);i++)
        {
            guess(str2[i]);
            if(win||lose)
                break;
        }

        if(win) printf("You win.
");
        else if(lose) printf("You lose.
");
        else printf("You chickened out.
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/TreeDream/p/5843428.html