【基础练习】【模拟】Uva489 - Hangman Judge题解
来源:互联网 发布:天猫淘宝棉拖鞋 编辑:程序博客网 时间:2024/04/30 21:00
ruka(刘汝佳《算法竞赛入门经典》第二版)第四章的例题,原题目使用函数写的,我读了代码后自己写了一遍,没有用函数,调了十几分钟,写这篇题解总结一下教训。
题目大意是判断输入的字符串是否猜中 猜中一个字母就猜中了所有相同字母 重复猜一个字母算错 一共有七次猜错机会 如果机会内猜对就赢了(win) 用光机会就输了(lose) 没用光但也没猜对就是放弃了 (chickend out)
代码放上:
//Uva 489 Hangman Judge//if²»¼ÓÀ¨ºÅÎÊÌâÏ൱ÑÏÖØ£¡¸øÎÒ¼ÓÀ¨ºÅ£¡£¡£¡£¡ #include<cstdio>#include<cstring>#define maxn 100 using namespace std;int left,chance;//left is still need to guess in the need to be guessed string(count by location),while chance is you still can wrong for this numberchar s[maxn],s2[maxn];int win,lost;int main(){int rnd;while (scanf("%d%s%s",&rnd,&s,&s2)==3 && rnd!=-1){printf("Round %d\n",rnd);win=lost=0;left=strlen(s);chance=7;for (int i=0;i<=strlen(s2)-1;i++){int bad=0;for (int j=0;j<=strlen(s)-1;j++)if (s[j]==s2[i]){ bad=1;//if bad=1 it's correct s[j]=' '; left--;}if (!bad) chance--; if (!left) win=1; else if (!chance) lost=1; if (win||lost) break;}if (win) printf("You win.\n");else if (lost) printf("You lose.\n"); else printf("You chickened out.\n"); } return 0;}
这是一个没有使用函数的代码 标程中判断相等的部分用了一个guess函数
刚开始甚至编译没有通过 一看 保留字打错 if后面没没有括号 都是这些低级错误 批评 最可耻的是if后面基本没几个带括号的 编译栏万里江山一片红TUT P党习惯根深蒂固啊TUT
调试时 第一遍所有的全出win 仔细一查 原来当时是这样写的:
chance=7;int bad=0;for (int i=0;i<=strlen(s2)-1;i++){ for (int j=0;j<=strlen(s)-1;j++)
原来 bad只清零了一次!后面无论找没找到相等字符都是清一色的bad=1 = =
【写到这里喜闻此程序通过 作为Uva的第一个程序 实在是可喜可贺啊O(∩_∩)O哈哈~虽然没啥技术含量 撒花~o(≧v≦)o~~好棒
于是抓紧修改 这回 样例中的一三两项过了 可是第二项本该输出放弃 却输出了赢 这是为什么呢?我一边一边读程序仍百思不得其解
于是写下这样一个语句:
printf("R%d %d",rnd,chance);
chance输出来 一三正常 二显然出了明显问题
于是把chance改为left 再次输出 这一下可了不得 left前七项非常正常 按说到了第七项就该停止了 可是下面竟然一串负数!这就是为什么输出win——只要left不为零就输出win 而负数显然也在此范围内
当我正准备跟踪查找时 忽然想到一个致命的错误
负数!输出负数!这是不是意味着访问了无效内存?于是赶紧回去检索,果不其然,
for (int i=0;i<=strlen(s2);i++){int bad=0;for (int j=0;j<=strlen(s);j++)
仔细看看这段代码 没有写strlen(xx)-1 没有减一 这就是错误的根源 求长度函数返回的是字符串真实的长度 是从零开始的 一个字符串声明为a[8] 实际上是a[0]-a[7] 长度是8
归根到底 P党1开始的字符串和数组实在是太棒了 以至于这里总是混乱 尤其是循环特别容易出错 应该尤其注意
ruka到这里还没有讲STL和string 因此字符数组实在令人埋怨 虽然string也是0开始 但是会方便很多吧
最后发一下第一次Uva截图留念
——昆山玉碎凤凰叫,芙蓉泣露香兰笑。
- 【基础练习】【模拟】Uva489 - Hangman Judge题解
- uva489 Hangman Judge (模拟)
- uva489 Hangman Judge
- uva489-Hangman Judge
- UVa489 Hangman Judge
- Uva489 - Hangman Judge
- UVA489 Hangman Judge
- UVA489 - Hangman Judge
- UVA489-Hangman Judge
- uva489 - Hangman Judge
- UVa489 - Hangman Judge
- UVa489 Hangman Judge
- UVA489 Hangman Judge
- UVA489 - Hangman Judge
- UVa489 - Hangman Judge
- Hangman Judge uva489
- UVa489-Hangman Judge
- 水题:UVa489-Hangman Judge
- [BFUACM]辗转相除法
- 为每位消费者爱车担保200万美金保险,是任性,还是疯了?
- jquery取kindeditor插件的textarea的值
- 【Github教程】史上最全github使用方法:github入门到精通
- Sort Colors
- 【基础练习】【模拟】Uva489 - Hangman Judge题解
- ⑩--Foundation框架基础
- 20150117学习总结
- E - 1sting (递推+大数加法)
- 32位汇编语言学习笔记(45)--测试简单文件操作接口(完)
- Linux Barrier IO
- HDU1864 01背包
- 什么时候使用存储过程比较适合?
- leetcode-valid parenthesses