UVa489刽子手的游戏

   竟然停了一周的时间再写,对时间的利用效率太低了。
   —————————————————————————————————————————————————————————————————————————————
   这个代码之前写过,但不知道为什么在UVa提交给wa了,因为已经做过上两篇博客的题(主要是自己思路做的),编码能力确实有很大提高,感觉重写以后的程序可读性更强,但是还是WA了,就想写个对拍程序,试一下看看数据,但是写完以后运行bat文件提示“丢失libstdc++-6.dl文件”(依然不明白怎么弄好这个,求指点00),今天又提交了一遍代码,结果就AC了。。。
——————————————————————————————————————————————————————————————————————————————
   1依然先写主函数,将某些实现具体功能的函数分开来写,更清晰一点。
   2重复出现的字母会按错来计算,之前的代码是每读一个玩家给的字母,就会与之前读过的玩家所给的字母进行比较,如果有重复的就chance--,这一次用的书上的思路, 将字符串中已经读过的字母变为‘ ’,也很好用,起码这两种都比再建一个数组装判断标志强。
   3再就是输出格式上,注意首字母是不是要大写,语句的结束是不是有标点。
   4关于标识符,避免使用已经定义过的变量名(如C语言中已经定义的32个关键字,比如常用的max、min)

#include <stdio.h>
#include <string.h>
#define maxn 100
char s1[maxn];
char s2[maxn];
int left;
int win;
int lose;
int chance;
void bijiao()
{
    int boo=0;
    int str1=strlen(s1);
    int str2=strlen(s2);
    for(int i=0;i<str2;i++)
    {
        for(int j=0;j<str1;j++)
        {
            if(s2[i]==s1[j])
            {
                s1[j]=' ';
                boo=1;
                left--;
            }
        }
        if(!boo)
            chance--;
        boo=0;
        if(!left)
            {
                win=1;
                return;
            }
        if(!chance)
        {
            lose=1;
            return;
        }
    }
    return ;//chickened;
}
int main()
{
    int n;
    while(scanf("%d%s%s",&n,s1,s2)&&n!=-1)
    {
        win=lose=0;
        chance=7;
        left=strlen(s1);

        //printf("all_s1:%d",leftn);

        printf("Round %d\n",n);
        bijiao();
        if(win)
            printf("You win.\n");
        else if(lose)
            printf("You lose.\n");
        else
            printf("You chickened out.\n");
    }
}



你可能感兴趣的:(ACM,uva)