171114—程序学习:猜数游戏。
来源:互联网 发布:李腾飞 java 编辑:程序博客网 时间:2024/06/08 10:49
这题自己折腾很久了。没搞出来。看了参考的程序,当时学习了,存点自己的考虑。
原题:
猜数游戏。玩家想好了一个 1~1000 之内的整数,由计算机来猜这个数。如果计算机猜出的数比 玩家想的数大,则玩家输入1;如果计算机猜出的数比玩家想的数小,则玩家输入-1;这个过程一直进行到 计算机猜中为止,玩家输入0。
一针见血的问题:
怎么实现多次输入数值加回车?你之前写的程序可是只能玩一次就挂掉了。。!
答:
while(1){cin>>....;if(。。。)break;}
由此便可实现,while语句的循环条件永远成立,可多次读取新的输入数值,并完成计算。
而“break”则承担着跳出循环,终结程序的作用。(详见转向语句。另有continue可从此次循环中跳出,进行下一次循环。)
另外,猜数的主要算法如何实现?
而且,显然这个程序需要纠错机制:
- 保证输入值合乎范围(0,1,-1)
- 保证所猜的值在合理范围【1,1000】
- 防止出现赖皮操作。(猜500嫌大,猜499嫌小。或者命名猜中却刻意继续)
看参考的代码:
#include<iostream> using namespace std; int guess(int k=0);int main(){ int feedback,t=1; cout<<"请你想好一个1~1000之内的整数,别告诉我,让我来猜猜!\n"; cout<<"猜中了,请输入0;若猜的数小了,请输入-1;若猜的数大了,请输入1\n"; cout<<"开始猜了……\n"; cout<<"是 "<<guess()<<" 吗?\t"; while(1) //用while(1)和break来实现多次操作。 { cin>>feedback; if(feedback==0) //主函数只完成对反馈值的初步判断和计数。追求低耦合度。 { //自己写的时候发现很容易写得很多很多层。。自己搞晕自己。 cout<<"我猜中啦!只猜了 "<<t<<" 次,很强吧!\n"; break; } cout<<"是 "<<guess(feedback)<<" 吗?\t"; t++; }}//算法的主要思想是,利用二分法,其中,left和right给出了猜数的区间端点,每次猜数即去区间中值,而在每次反馈之后,按反馈结果将上次所猜的数值g赋给left或right,得到新的区间。重复进行。很好的用Cpp描述了这个方法的过程,佩服佩服。int guess(int k){ static int left=1; static int right=1000; static int g = 500; switch(k) { case 0: break; case 1: right=g-1; break; case -1: left=g+1; break; default : cout<<"你输入错了,请再输入。\n"; return g; } //switch语句只负责了判断输入值并赋值的准备工作,没有直接输出.很智慧。//如果不这样的话,在完成赋值之后,最起码赖皮操作就没法判断。。因为你还要输出,读都费劲,写更容易出错!if(right<=left) { cout<<"你耍赖…不跟你玩了!\n"; //防赖皮通过在一次反馈之后,输出新值之前判断区间是否符合left《right来达到。(我这是严格小于号!) exit(0); } g=(left+right)/2; return g;}
阅读全文
0 0
- 171114—程序学习:猜数游戏。
- 猜数游戏程序
- 【程序11】猜数游戏
- 猜数游戏的Java程序
- C++一个猜数游戏程序
- JAVA猜数游戏程序小研究
- 数独游戏程序
- 啊哈C——学习5.10猜数游戏
- Python学习第一记——猜数游戏
- 【程序4】填数游戏
- 【程序4】填数游戏
- c/c++程序之_猜数游戏
- 创建一个程序来完成简单的猜数游戏
- Java——猜数游戏
- 人机猜数游戏
- 1995猜数游戏
- Java猜数游戏
- 猜数游戏
- 外部进程嵌入到Qt进程界面
- jquery 实现 图片上传 预览
- 线程监控
- myEclipse更改网站名称
- Xcode工程直接拖
- 171114—程序学习:猜数游戏。
- Beaglebone Black 开发笔记
- #!/bin/bash和#!/bin/sh是什么意思以及区别
- OpenCV.Resize详解
- 优达机器学习:异常值
- 如何对比两个Jar包
- 爬虫实战爬取数据
- 课外作业之CountDownLatch应用详解
- 深入C++的new