这是个游戏题,是原来上英语课时,老师喜欢出的吊死鬼的游戏...所以游戏规则大概也清楚.不过需要注意几点:

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解题报告相关推荐

  1. UVa 10082 - WERTYU 解题报告 - C语言

    1.题目大意: 输入一个错位的字符串(字母全为大写),输出原本想打出的句子. 2.思路: 如果将每个输入字符所对应的应输出字符一一使用if或者switch,则过于繁琐.因此考虑使用常量数组实现. 3. ...

  2. 解题报告(五)组合计数(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  3. 解题报告:【kuangbin带你飞】专题九 连通图

    目录 A.POJ 1236 Network of Schools(有向图缩点) B.UVA 315 Network(找割点) C.UVA 796 Critical Links(桥) D.POJ 369 ...

  4. 解题报告 (五) Burnside引理和Polya定理

    Burnside引理 笔者第一次看到Burnside引理那个公式的时候一头雾水,找了本组合数学的书一看,全是概念.后来慢慢从Polya定理开始,做了一些题总算理解了.本文将从最简单的例子出发,解释Bu ...

  5. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  6. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  8. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  9. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  10. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

最新文章

  1. 《机器学习实战》第5章 随机梯度上升算法
  2. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )
  3. 怎么获取一个类型的所有字段的名字 和获取给予数据相应的值
  4. Ubuntu下编译内核
  5. java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?
  6. 在c++中qsort()排序函数的使用qsort函数应用大全
  7. Tomcat显示文件列表
  8. 如何使用VS2017将客户端库添加到ASP.NET CORE 2.2(简单方法)
  9. RedisTemplate清空所有键值对
  10. mysql数据库基操,都坐下!
  11. 学生管理系统java源代码_java学生管理系统源代码
  12. 最大子段和三种算法实现
  13. 联想z400linux调节屏幕亮度,联想z400屏幕亮度调节方法
  14. TextView跑马灯
  15. PNP三极管作为开关管如何使用(集电极接 负载)
  16. Android 练习项目 ——简单记账软件的实现
  17. 关于MSELoss、BCELoss、CELoss损失函数求导的推导
  18. 以太网MII接口类型大全 MII、RMII、SMII、SSMII、SSSMII、GMII、RGMII、SGMII、TBI、RTBI、XGMII、XAUI、XL
  19. 求1到100之间的奇数之和、偶数之积
  20. 国外远控软件DarkComet-RAT

热门文章

  1. Android开发之显示篇(弄懂ppi、dpi、pt、px、dp、dip、sp之间的关系看这一篇就够了)
  2. PostgreSQL数据库中的数据类型转换
  3. html中a标签空白页,a标签href设置javascript:void(0),在chrome点击打开新的空白页
  4. SUSE Linux--zypper程序包管理(一)
  5. 铁威马NAS之如何利用docker安装Jellyfin媒体服务器
  6. [NLP入门篇] 我用四大名著学Embedding
  7. Linux 设备树中pinctrl与gpio(lichee nano pi)
  8. Python制作七夕比心表白
  9. 抽象类中是否一定要有抽象方法?
  10. Vue--》如何在Vue3中书写TSX