关于集合思想,人机猜数
来源:互联网 发布:2017非农数据公布时间 编辑:程序博客网 时间:2024/04/30 10:03
这次程序设计的题目是: 由计算机“想”一个四位数,请人猜这个四位数是多少。人输入这个四位数后,计算机首先判断这四个数中有几个猜对了,称之为B,并且在猜对的数字中又有几位位置也是对的,称之为A,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数为止。请编程实现该游戏,游戏结束时,显示人猜一个数用了几次。
第一个问题是:如何让计算机想一个四位数,因为没有明确要求所以可以是重复的四位数,并且要是随机的,不能每次都是一样的数字,此时想到的是srand和rand(),调用了所谓的“种子”,头文件是<time.h>,如何使用如下:
srand((unsigned)time(NULL));
for(i=0;i<4;i++)
{
z=rand();
str[i]=z%10;
}
为什么是用for循环存储进数组呢,这就是第二个问题:如何让玩家猜的数与系统想的数做比较?我太菜了所以想不出好办法,所以选择了用数组的形式,把计算机的数存进数组,也让玩家输入的数存进数组,数组与数组间比较,还是比较简单的,运用两个for循环,
for(i=0;i<4;i++) // 这里面的数组cai里的4位数是玩家所猜的,数组str里的4位数是计算机所给的;
{
if(cai[i]==str[i]) // 这里面的a,就是题目所说的A,数字对且位置对,b是题目所说的B,数字对但位置错;
{
a++; // 将数组里的每个数与另一个数组比较,完全一样就可以让a加1;
}
for(j=0;j<4;j++)
{
if(cai[i]==str[j])
{
b++; // 同理,b的加1法则也是一样;
str[j]=-1; // 为何得出b加1后,将计算机所给的那个比较过的数字变成-1?break; // 因为不这么做,会导致之后一样的数字也能让b加1,从而结果不准确,所以变成-1可以避免出现这样状况
}
}
}
b=b-a; // 这里因为b和a的计算方式相同,在没变数组的情况下,所以要先减掉a的值;
在那之后,是要恢复计算机数组str的,此处调用memcpy库函数, 即memcpy(s1,s2,sizeof(int)*4)这个格式的意思是将s2数组的前四位整型数字复制给s1数字,我们在这里面随便给第三个数组s3,先存进str数组的4位数,等循环结束就将s3的给还str;
问题三,如何实现多次循环猜数,而不是只猜一次就结束游戏?设定好a!=4的情况不停止循环就ok,如下:
while(a!=4)
{
……
}
至于一些菜单界面和保护程序,就看图就ok(这个自己设计不麻烦),下面给出全部代码:
对了,这其中的system(”cls“);是清屏作用,纯粹好看,system(”color 0A“);是改变背景颜色和字体颜色,0-9是变背景颜色,A-F是变字体颜色,纯粹是为了醒目;
本次使用的是C语言,是在vc6环境下运行的,所以没有调用random库函数(vc不认识!)
- 关于集合思想,人机猜数
- 人机猜数游戏
- 人机猜数游戏
- 五子棋人机对战思想
- 人机猜数字
- C++经典实用趣味编程百例(91)-人机猜数游戏
- C++经典实用趣味编程百例精解(92)-人机猜数游戏(2)
- 关于思想
- 回调函数思想
- 丑数的思想
- 算法思想:关于找数组中第K大的数的思考
- 以集合思想编写SQL
- 《Java编程思想》--集合类
- Java编程思想-集合基本概念
- 关于集合
- 关于集合
- 关于集合
- 关于集合
- c++之string类型
- C++基本简介
- SQL
- 55. Jump Game
- Java之Vector向量类实现自动动态增长的对象数组-类似动态数组
- 关于集合思想,人机猜数
- 我学习过的Android GitHub开源项目
- TextView里限制输入字数的方法
- Myeclipse格式化不换行的设置
- centos6.5环境下svn服务器和客户端配置实用详解
- Angular $http拦截器介绍与使用
- 第132课: Spark Streaming源码经典解读系列之七:Executro容错工作内幕源码解密
- 版本管理工具的安装和使用
- Android应届生面试应该掌握的技能