c语言作业和电脑猜数字,发个自己写的让电脑猜数字的小游戏程序

发个自己写的让电脑猜数字的小游戏程序

//本程序是您想一个四位数字,然后让电脑(也就是我这个程序)来给你猜的

//比如,您脑子里想了个四位数(2486)(注意:四位数不能有重复数字:例如1224就不可以)

//然后电脑就开始猜,电脑每猜一次,您就需要给它一个反馈信息,格式为 X Y,例如(电脑猜0123)

//您的反馈信息就是 0 1 如此反复,直到您输入4 0,也就是说电脑猜中了你的数字了

#define NULL 0

#include

#include

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<

do{

Store->Num1=head->next->Num1;

Store->Num2=head->next->Num2;

Store->Num3=head->next->Num3;

Store->Num4=head->next->Num4;

cout<

cout<Num1<Num2<Num3<Num4<

cout<

cin>>check1>>check2;

// cout<Num1<Num2<Num3<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<Num1<Num2<Num3<Num4<

return 0;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值