游戏规则:

有四个插口, 可以放有四个球,颜色分别为红色(R),黄色(Y),绿色(G), 和蓝色(B),放的颜色顺序位置都可以是随机的,如:RYGB,YGRB等都是合法放置。

我们需要猜测四个颜色,比如原插口放置球是RGBY;我们猜测RRGG,那么第一个R正好对应我们有一个"hit",猜了个G,但是位置没对应,就有一个"pseudo-hit".而且不能算两个G,因为原插口只有一个G。

要我们设计一个算法可以返回hits和pseudo-hits的数量。

注意:插口有RGBY,猜GGRR只能是一个hit和一个pseudo hit。原书的程序应该是有点错误的,按他的程序这个解答就是1个hit和3个pseudo hit了。

先吃透他的规则,注意特殊情况,然后就好做了。

书中提到的注意地方:

1 代码清晰,比如定义一个结构体返回结果

2 定义额外函数

这里用到的一个最基础的知识就是计算排序counting sort,这个算法很重要,好像出现的地方很多,就算不是直接使用counting sort,类似的使用方法经常出现,比如这里也用到了相关知识。计数算法参考:http://blog.csdn.net/kenden23/article/details/12437455

程序:

#include<iostream>using namespace std;const int SLOTSCOLORS = 4;int rgbyToIndex(char c)
{switch (c){case 'R':return 0;break;case 'G':return 1;break;case 'B':return 2;break;case 'Y':return 3;break;default:return -1;break;}
}struct Result
{int hits;int pseudoHits;Result():hits(0), pseudoHits(0){}
};Result guessHits(char *slots, char *guess)
{if (slots == nullptr || guess == nullptr){return Result();}Result res;int counting[SLOTSCOLORS];for (int i = 0; i < SLOTSCOLORS; i++){if(guess[i] == slots[i]){res.hits ++;//注意:要把数组加标志-1,标明是hit,就不能计算入pseudo-hit了。counting[rgbyToIndex(guess[i])] = -1;}else if (counting[rgbyToIndex(guess[i])] != -1){counting[rgbyToIndex(guess[i])] = 1;}}for (int i = 0; i < SLOTSCOLORS; i++){if(counting[i] == 1)res.pseudoHits ++;}return res;
}int main()
{char slots[4] = {'R','G','B','Y'};char guess[4] = {'G','G','R','R'};Result res = guessHits(slots, guess);cout<<"hits : pseudo hits\n";cout<<res.hits<<" : "<<res.pseudoHits<<endl;system("pause");return 0;
}

运算结果:

Reference:

Cracking the coding interview

面试题 猜颜色球游戏相关推荐

  1. 【Python学习笔记】猜颜色小游戏

    [Python学习笔记]猜颜色小游戏 前言 一.算法原理 1. 生成器部分 2. 检测器部分 二.代码 过程BUG汇总笔记 总结 前言 最近馋世界游戏大全51,心血来潮用Python写了个猜颜色,顺便 ...

  2. Java算法试题--猜字母/杀人游戏

    题目例如以下: 把abcd-s共19个字母组成的序列反复拼接106次,得到长度为2014的串. 接下来删除第1个字母(即开头的字母a).以及第3个,第5个等全部奇数位置的字母. 得到的新串再进行删除奇 ...

  3. 疯狂猜颜色小游戏C++个人项目

    @疯狂猜颜色小游戏 欢迎浏览 这是一个使用C++语言编写的控制台小游戏,详细代码如下,敬请参考,不足之处还请提出,我的联系方式:1207787189@qq.com 1.交互界面和功能 玩家进入游戏后可 ...

  4. 2020牛客NOIP赛前集训营-提高组(第一场) T2 牛牛的猜球游戏

    题目链接: 牛客原站 通过记录: 题目链接2:T277380 牛牛的猜球游戏(被我们搬到洛谷力): 洛谷搬运 题目描述   有十个数 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ...

  5. 制作滚球游戏学习Unity3D

    从创建项目开始 创建一个项目 打开unity,在Projects中可以查看当前的本地项目或者云端项目,点击New project或者右上角的New都可以新建项目. 然后在1处填写创建项目的名称,2处选 ...

  6. 微信小程序开发实例:猜数字小游戏

    这学期选修了<微信小程序设计>这门通识课,最近准备把本学期的部分小作业整理一下. 一.案例描述 设计一个微信小程序,由后台生成一个0~100的随机整数,用户猜这个整数,并在输入框中输入用户 ...

  7. Vue3和码上掘金实现猜数字小游戏

    前言 Vue3.0 是2020年09月18日正式发布的,距现在两年多了!而且Vue3是默认的Vue版本了,功能也在不断完善和扩展中,比如焕然一新的 Composition API 语法.setup语法 ...

  8. java弹力球游戏_小班弹力球游戏教案

    小班弹力球游戏教案 在教学工作者开展教学活动前,通常需要用到教案来辅助教学,编写教案有利于我们科学.合理地支配课堂时间.我们该怎么去写教案呢?以下是小编为大家整理的小班弹力球游戏教案,欢迎阅读,希望大 ...

  9. Python编写的猜数字小游戏~~~基于Tkinter库

    Python编写猜数字小游戏 编写猜数字小游戏 一.界面 1.PyQt5 2. wxPython 3. PyGTK 二.Tkinter功能 ① 15种核心组件 ② 组件的放置和排版(pack,grid ...

最新文章

  1. 10个方法让程序员更加优秀
  2. opensips和pbx之间的连接
  3. 更高效的利用Jupyter+pandas进行数据分析,6种常用数据格式效率对比!
  4. Sky Garden
  5. python web 服务器实时监控 websocket_python websocket网页实时显示远程服务器日志信息...
  6. SPA单页应用的优缺点
  7. 分布式Session的几种实现方式
  8. 我和计算机比本领教案反思,《比本领》教学设计及反思
  9. 无线上网卡和无线网卡的区别
  10. FLASH中打开网页链接,本地打不开的问题。
  11. 机器学习----深刻理解高斯过程回归
  12. 树莓派搭建博客/网站教程
  13. 51CTO学院三周年
  14. 推荐一款手机、电脑必备的效率工具,功能强大,支持所有平台
  15. Simulink建模:一阶滤波模型
  16. remix中错误集合
  17. Residual Reinforcement Learning for Robot Control
  18. 乐视网:截至2月已逾期金融机构借款类债务20.84亿元
  19. Postfix邮件服务器搭建之虚拟用户配置
  20. 读书笔记(VI) 少有人走的路

热门文章

  1. [BZOJ 1135][POI2009]Lyz
  2. iOS 判断是否为iPhoneX以上设备
  3. ssm+jsp计算机毕业设计车辆违章查询系统2hie7(程序+LW+源码+远程部署)
  4. office2016和Visio2016安装冲突的解决办法(后附安装包链接)
  5. 音视频技术之《移动直播秒开优化经验》
  6. SyntaxError: Non-UTF-8 code starting with '\xb5' in file“问题解决办法
  7. 基于verilog的 PRBS编码
  8. Go语言中的complex(复数)
  9. 求滑动窗口中的最大值和最小值
  10. matlab包络分析函数,数据包络分析 (MATLAB代码).doc