| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6215 人关注过本帖
标题:发个自己写的让电脑猜数字的小游戏程序
取消只看楼主 加入收藏
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
 问题点数:0 回复次数:6 
发个自己写的让电脑猜数字的小游戏程序

//本程序是您想一个四位数字,然后让电脑(也就是我这个程序)来给你猜的
//比如,您脑子里想了个四位数(2486)(注意:四位数不能有重复数字:例如1224就不可以)
//然后电脑就开始猜,电脑每猜一次,您就需要给它一个反馈信息,格式为 X Y,例如(电脑猜0123)
//您的反馈信息就是 0 1 如此反复,直到您输入4 0,也就是说电脑猜中了你的数字了


#define NULL 0
#include <iostream>
#include <string>
using namespace std;

struct Data//定义一个结构体,用来存放所有可能的四位数字的组合
{
char Num1;//定义成char类型,主要是为了节省空间
char Num2;
char Num3;
char Num4;
Data *next;
};

int compareA(Data *a,Data *b)//返回比较的数值
{
int m;
m=0;
if (a->Num1==b->Num1) m=m+1;
if (a->Num2==b->Num2) m=m+1;
if (a->Num3==b->Num3) m=m+1;
if (a->Num4==b->Num4) m=m+1;
return m;
}
int compareB(Data *a,Data *b)//同上
{
int n;
n=0;
if (a->Num1==b->Num4||a->Num1==b->Num2||a->Num1==b->Num3) n=n+1;
if (a->Num2==b->Num1||a->Num2==b->Num3||a->Num2==b->Num4) n=n+1;
if (a->Num3==b->Num1||a->Num3==b->Num2||a->Num3==b->Num4) n=n+1;
if (a->Num4==b->Num1||a->Num4==b->Num2||a->Num4==b->Num3) n=n+1;
return n;
}

int main()
{
Data *head;//head是整个链表的头接点
Data *p;
Data *p1;
Data *Store;//Store用来存放电脑所猜的四位数字

head=new Data;
Store=new Data;
p=head;
head->Num1='a';
head->Num2='b';
head->Num3='c';
head->Num4='d';//对头节点赋值


int check1,check2;
int num1,num2,num3,num4;
for (num1=48;num1<=57;num1++)
for (num2=48;num2<=57;num2++)
for (num3=48;num3<=57;num3++)
for (num4=48;num4<=57;num4++)
{if (!(num1==num2||num1==num3||num1==num4||num2==num3||num2==num4||num3==num4))
{p1=new Data;
p1->Num1=num1;
p1->Num2=num2;
p1->Num3=num3;
p1->Num4=num4;
p->next=p1;
p=p1;
}
}//利用for循环,来建立链表,并把所有可能的四位数字组合存放到链表的节点中去

p->next=NULL;
p=head;
p1=p->next;//完成链表建立,p,head指向头节电,p1指向第一个存放数据的节点(数据为0 1 2 3)
cout<<"欢迎使用电脑猜数字游戏程序,谢谢!请您想任意一个四位数字,然后根据我猜的数字给我反馈信息。"<<endl;

do{
Store->Num1=head->next->Num1;
Store->Num2=head->next->Num2;
Store->Num3=head->next->Num3;
Store->Num4=head->next->Num4;
cout<<"我猜的数字是:";
cout<<Store->Num1<<' '<<Store->Num2<<' '<<Store->Num3<<' '<<Store->Num4<<' '<<endl;

cout<<"请输入验证信息:";
cin>>check1>>check2;

// cout<<"数组"<<Store->Num1<<Store->Num2<<Store->Num3<<Store->Num4<<' ';
if(check1!=4)
{
while(p1->next!=NULL)//用Store里的数据和P1节点的数据比较,如果比较的结果和check1,check2均相同
//那就说明该节点有可能是所要猜的数字,如果不同,则从链表中删除该节点
{
if ((compareA(Store,p1)==check1)&&(compareB(Store,p1)==check2))
{p=p->next;
p1=p1->next;}//保留节点, 指针后移一位
else
{ p1=p1->next;
delete p->next;
p->next=p1;}//删除P1节点,P1后移,并使得p->next指向P1


}//while语句结束

}//if语句结束
p1=head->next;
p=head;

}while(check1!=4);//do...while用来实现大循环,只要chechk1!=4,则说明还没有猜测到正确答案

cout<<"您所想的数字是:";
cout<<Store->Num1<<' '<<Store->Num2<<' '<<Store->Num3<<' '<<Store->Num4<<' '<<endl;
return 0;

}

搜索更多相关主题的帖子: 数字 小游戏 include 
2007-08-03 11:47
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
以下是引用totohack在2007-8-3 13:25:32的发言:
要这么复杂吗

第一:如果是是电脑想个数字,让你来猜,那么当然这个程序很简单,20行就可以搞定
第二:这个程序的目的是你想个数字,让电脑来猜
第三:我这样写,主要是处于规范话的原因,当然了,如果你用函数调用,不用链表,而用一个大数组的话,也是非常好实现这个功能的,之所以这么做是为了更标准一些,为了别人更好的阅读程序

2007-08-03 14:39
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
请教一下折半法怎么猜?
谢谢
2007-08-03 16:14
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
以下是引用卧龙孔明在2007-8-3 16:20:00的发言:

比如0-10000间的数,那么先猜10000/2=5000
如果不是,那么如果大了就减一半,即5000-5000*0.5 ,如果小了就加一半 即5000+5000*0.5
...............
我写的那个程序就是

能给个源程序么?
还有,按照你这个算法,平均需要猜几次才能猜出一个四位数字?

2007-08-03 16:28
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
回复:(卧龙孔明)以下是引用bupthehe在2007-8-3 16:...
你没有理解清我的意思。
猜数字这个游戏你知道吧?
他是这样的,假设我是甲,你是乙,你想了一个数字(四位数字,例如3851[四个数字不能相同])让我来猜
于是我就开始猜了,假设我猜的是0357,那么这个时候你需要给我一个反馈信息(不是说我猜的数大了,或者小了)而是说我猜的这个数里有几个数字是位置正确,并且直也正确,同时又有几个数字是直正确,但位置不正确。按照上面的例子,你把3851和0357做比较,发现数字5的位置正确并且数也正确,而3数字正确,但位置不正确。这个时候你就给我返回这样的信息:1 1
然后,我根据你返回的信息来接着猜


直到,你返回的信息为4 0,那么就说明我已经猜出了你所想的那个数字

我这个程序,就是把电脑做为甲,人作为乙,乙在脑子里想个四位数字,然后让电脑来猜
2007-08-03 16:37
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
以下是引用totohack在2007-8-3 18:42:04的发言:
如果第一次猜就返回 4 0 呢?

那就说明已经猜中了你所想的数字啊

2007-08-03 18:43
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
以下是引用totohack在2007-8-3 18:52:09的发言:
矛与盾

不过我想到一个算法,先猜有什么数,再排列,那里要什么大数组,最多是递归函数

最好能实现出来啊,呵呵

可以和我这个算法比较一下

2007-08-04 15:28
快速回复:发个自己写的让电脑猜数字的小游戏程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024829 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved