"难以想象自己在写这道题时犯了多少错误,都是每一次没有得出正确答案之后硬生生改过来的!!我感觉你的思维真的很不严密!而你每次写完之后就压根没有想过自己测试的问题???
还没有提交,记得反思此题!”
提交之后,答案是错的!!!(测试数据都通过了,为什么还会错呢?)
/*
输入一个字符串s,
1.猜测一个字符串,每次说出一个字母即可,如果你说的字母不包含在s里且次数超过7次,
那么就输了。
2.如果你在7次错误以内把s内所含的字符都猜出来了(s中重复的字符只需要猜中一次即可)
那么你就赢了。
3.如果你猜的字符串既不赢,又没有犯够7次错误,
那么视为放弃。
如何处理s中重复的字母?
接收判断,比较,把已经判断正确的位置改为空格
*/
#include<stdio.h>
#include<string.h>
int main(){
char ans[100];
char guess[100];
int round;
while(scanf("%d",&round) && round != -1){
// memset(ans,0,100);
// memset(guess,0,100);
scanf("%s",ans);
scanf("%s",guess);
printf("Round %d\n",round);
int wrongnum=0;
int flag = 1;
int anslen = strlen(ans);
int guesslen = strlen(guess);
for(int i=0; i<guesslen; i++){
int notmatch=1;
for(int j=0; j<anslen; j++){
if(guess[i] == ans[j]){
ans[j] = ' ';
notmatch=0;
}
}
if(notmatch)
wrongnum++;
}
for(int j=0; j<anslen; j++){
if(ans[j] != ' ')
flag = 0;
}
printf("flag is %d and wrongnum is %d\n",flag,wrongnum);
if(flag == 0){
if(wrongnum>=7 )
printf("You lose.\n");
if(wrongnum<7 )
printf("You chickened out.\n");
}
else
printf("You win.\n");
}
return 0;
}
“我又修改了一版,但是还是不对…
#include<stdio.h>
#include<string.h>
int main(){
char ans[100];
char guess[100];
int round;
while(scanf("%d",&round) && round != -1){
scanf("%s",ans);
scanf("%s",guess);
printf("Round %d\n",round);
int chance=7;
int flag = 1;
int anslen = strlen(ans);
int guesslen = strlen(guess);
for(int i=0; i<guesslen; i++){
int notmatch=1;
for(int j=0; j<anslen; j++){
if(guess[i] == ans[j]){
ans[j] = ' ';
notmatch=0;
}
}
if(notmatch)
chance--;
}
for(int j=0; j<anslen; j++){
if(ans[j] != ' ')
flag = 0;
}
if(flag == 0){
if(chance<1 )
printf("You lose.\n");
if(chance>=1)
printf("You chickened out.\n");
}
else
printf("You win.\n");
}
return 0;
}
出错原因在于第一个for循环,如果猜测的字串比答案长的多的话,即便已经把答案猜测对了,chance仍然在减少,导致出错。…
这是参考书给出的答案,它最大的问题难道不是输进-1之后不能正常退出???
#include<stdio.h>
#include<string.h>
#define maxn 100
int left,chance;
char s[maxn], s2[maxn];
int win,lose;
void guess(char ch){
int bad=1;
for(int i=0;i<strlen(s);i++){
if(s[i] == ch){
left--;
s[i] = ' ';
bad = 0;
}
}
if(bad) chance--;
if(!chance) lose=1;
if(!left) win=1;
}
int main(){
int rnd;
while(scanf("%d%s%s",&rnd,s,s2) == 3 && rnd != -1){
printf("Round %d\n",rnd);
win=lose=0;
left=strlen(s);
chance = 7;
for(int i=0; i<strlen(s2); i++){
guess(s2[i]);
if(win||lose) break;
}
if(win) printf("You win.\n");
else if(lose) printf("You lose.\n");
else printf("You chickened out.\n");
}
return 0;
}