{UVA}UVA-489解题报告
这是个游戏题,是原来上英语课时,老师喜欢出的吊死鬼的游戏...所以游戏规则大概也清楚.不过需要注意几点:
1.若正确答案中某个字母出现了多次,那么只要猜中那个字母一次,就算答案中那个字母全被猜中.
2.猜错的字母如果重复,则只算错一次.
若7条命都没了,就算失败,全部猜中则算成功.如果没全猜中但是还有剩余生命,则算chikened out.
1) 解决第1点,采用一个函数,来返回answer字符串中不重复字母的个数real_len.也就是说如果正确猜对real_len
个字母,就成功.
2)解决第2点,同样采用一个数组来存放猜错的字母,每次猜错后,先搜索该数组,当数组中已经有该字母,则跳过,否则加
入数组.同样的方法对待猜对的字母.
这个题目我写的代码有很多for循环和if-else.而且由于是判断对错的题目,上面又引入了为了不重复元素的数组.因此
代码中就出现了很多检索的循环.
简单来说,检索一个元素是否在数组中.最直接的方法是:
for(i = 0; i < array_len; i++) { if(key == array[i]) break; } if(i == array_len) { key is not in the array; } else { key is in th array; }
也就是通过循环变量最后的值来判断.如果循环是因为循环变量到最大值而结束,就说明元素不在数组.
而如果是因为满足其中的if条件而break出来的,就说明元素是在数组中.
写这个题目的时候思路还比较清晰,写的比较快,30分钟左右就差不多写完了.觉得自己各种条件都考虑得差不多了.
但是提交一直WA.又自己慢慢熬....熬了3天...终于发现还有一种情况没考虑到:
就是首先一段字母序列中已经成功命中答案的所有字母,但是后面再加几个错误的字母,又会因为生命数为0而lose.
如:
answer : cheese
guess : cheeseabdfghijk
显然这里有矛盾需要处理.加个if语句判断下,如果已经成功就break出来就AC了.
所以,自己还是考虑得不全面.以后这方面还是需要加强...
最后,贴下代码:
/*Date: 2010-5-20*/ /*UVA489*/ #include<stdio.h> #include<string.h> char answer[1000]; char temp[1000]; char wrong[1000]; char right[1000]; int different_char(char *s, int len) { int i,j,real = 0; char temp[1000]; for(i = 0; i < len; i++) { for(j = 0 ; j < real; j++) { if(s[i] == temp[j]) break; } if(j == real) { temp[j] = s[i]; real++; } } return real; } int main() { int i,j,k,d,answer_len,temp_len,real_len; int right_len ,round = 0,wrong_len,life; scanf("%d",&d); fgetc(stdin); while(d != -1) { round = d; right_len = 0,wrong_len = 0,life = 7; memset(right,0,sizeof(right)); memset(wrong,0,sizeof(wrong)); fgets(answer,1000,stdin); fgets(temp,1000,stdin); answer_len = strlen(answer) - 1; temp_len = strlen(temp) - 1; real_len= different_char(answer,answer_len); for(i = 0; i < temp_len; i++) { for(j = 0; j < answer_len; j++) { if(temp[i] == answer[j]) { break; } } if(j == answer_len) { for(k = 0; k < wrong_len; k++) { if(temp[i] == wrong[k]) break; } if(k == wrong_len) { life--; wrong[wrong_len] = temp[i]; wrong_len++; } } else { for(k = 0; k < right_len; k++) { if(temp[i] == right[k]) break; } if(k == right_len) { right[right_len] = temp[i]; right_len++; } } if(right_len == real_len) break; } if(life > 0) { if(right_len == real_len) printf("Round %d/nYou win./n",round); else printf("Round %d/nYou chickened out./n",round); } else printf("Round %d/nYou lose./n",round); scanf("%d",&d); fgetc(stdin); } return 0; }
{UVA}UVA-489解题报告相关推荐
- UVa 10082 - WERTYU 解题报告 - C语言
1.题目大意: 输入一个错位的字符串(字母全为大写),输出原本想打出的句子. 2.思路: 如果将每个输入字符所对应的应输出字符一一使用if或者switch,则过于繁琐.因此考虑使用常量数组实现. 3. ...
- 解题报告(五)组合计数(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告:【kuangbin带你飞】专题九 连通图
目录 A.POJ 1236 Network of Schools(有向图缩点) B.UVA 315 Network(找割点) C.UVA 796 Critical Links(桥) D.POJ 369 ...
- 解题报告 (五) Burnside引理和Polya定理
Burnside引理 笔者第一次看到Burnside引理那个公式的时候一头雾水,找了本组合数学的书一看,全是概念.后来慢慢从Polya定理开始,做了一些题总算理解了.本文将从最简单的例子出发,解释Bu ...
- uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)
线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报 分类: ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...
- 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(十三)中国剩余定理(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(四)生成函数(ACM/ OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
最新文章
- 《机器学习实战》第5章 随机梯度上升算法
- 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )
- 怎么获取一个类型的所有字段的名字 和获取给予数据相应的值
- Ubuntu下编译内核
- java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?
- 在c++中qsort()排序函数的使用qsort函数应用大全
- Tomcat显示文件列表
- 如何使用VS2017将客户端库添加到ASP.NET CORE 2.2(简单方法)
- RedisTemplate清空所有键值对
- mysql数据库基操,都坐下!
- 学生管理系统java源代码_java学生管理系统源代码
- 最大子段和三种算法实现
- 联想z400linux调节屏幕亮度,联想z400屏幕亮度调节方法
- TextView跑马灯
- PNP三极管作为开关管如何使用(集电极接 负载)
- Android 练习项目 ——简单记账软件的实现
- 关于MSELoss、BCELoss、CELoss损失函数求导的推导
- 以太网MII接口类型大全 MII、RMII、SMII、SSMII、SSSMII、GMII、RGMII、SGMII、TBI、RTBI、XGMII、XAUI、XL
- 求1到100之间的奇数之和、偶数之积
- 国外远控软件DarkComet-RAT
热门文章
- Android开发之显示篇(弄懂ppi、dpi、pt、px、dp、dip、sp之间的关系看这一篇就够了)
- PostgreSQL数据库中的数据类型转换
- html中a标签空白页,a标签href设置javascript:void(0),在chrome点击打开新的空白页
- SUSE Linux--zypper程序包管理(一)
- 铁威马NAS之如何利用docker安装Jellyfin媒体服务器
- [NLP入门篇] 我用四大名著学Embedding
- Linux 设备树中pinctrl与gpio(lichee nano pi)
- Python制作七夕比心表白
- 抽象类中是否一定要有抽象方法?
- Vue--》如何在Vue3中书写TSX