| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:新人报道,顺便发一下自己的一个小程序
只看楼主 加入收藏
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
 问题点数:0 回复次数:2 
新人报道,顺便发一下自己的一个小程序
猜数字这个游戏大家都玩过吧?
就是你脑袋里想个四位数字(四个数字不能相同,例如3461,不能有重复的数字),然后让别人猜
对方没猜一次,你就给他一个反馈信息,反馈信息是:你有X个数字猜对了,有Y个数字虽然猜对了,但数字的位置不对;
(例如:你脑子里想的数字是2546,对方猜的是4527,那么你反馈的信息就是1 2(输入的时候两个数字之间不用逗号))
对方根据你这个反馈信息继续猜,直到猜对为止

我写的这个程序,是让电脑来猜你想的数字,呵呵,大家有兴趣的话给测试一下:
示范一下:比如您脑子里想了一个数字0486,电脑就猜您想的数字。电脑每猜一次的话,您就得根据电脑猜的数字给电脑一个反馈信息,例如电脑猜的数字是0164,那么您的反馈信息就是 1 2,如此循环,直到猜出正确的数字!

PS:算法不是最好的,正在想如何才能让电脑用更少的次数猜出你所想的数字来!


下面是代码
7vP0rcce.rar (1.67 KB) 新人报道,顺便发一下自己的一个小程序


搜索更多相关主题的帖子: 新人 
2007-08-02 14:16
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 

呵..文曲星么?
那该反馈1A2B哦...
鼓励一个...
记得把修改版发上来..最好有个思路,心得什么的..


女侠,约吗?
2007-08-02 20:01
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
回复:(bupthehe)新人报道,顺便发一下自己的一个小...

//本程序是您想一个数字,然后让电脑(也就是我这个程序)来给你猜的
//比如,您脑子里想了个四位数(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!=1,则说明还没有猜测到正确答案

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

}

2007-08-03 11:45
快速回复:新人报道,顺便发一下自己的一个小程序
数据加载中...
 
   



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

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