竟然停了一周的时间再写,对时间的利用效率太低了。
—————————————————————————————————————————————————————————————————————————————
这个代码之前写过,但不知道为什么在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");
}
}