计算机管理 guess,请帮忙填写下面的guess函数,就是让计算机自己把数字给猜出来!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#define M 4 //猜几个数字

//交换

void swap(int*a,int*b)

{

int t=*a;

*a=*b;

*b=t;

}

//将数组随机打乱

void random_shuffle(int* a,int n)

{

int i;

for(i=0;i

{

int x=rand()%n;

int y=rand()%n;

if(x!=y) swap(a+x,a+y);

}

}

//生成数位不重复的M位全部数据,存在数组a中,并打乱,备用

int gen(int* a)

{

int count=0,i,j;

int max=1;

for(i=0;i

for(i=0;i

{

_Bool flag[10]={0};

int t=i;

for(j=0;j

if(flag[t%10]) break;

else flag[t%10]=1,t/=10;

if(j==M)

a[count++]=i;

}

random_shuffle(a,count);

return count;

}

void test(int answer,int player,int* A,int* B)

{

int i=0,j;

int answer_a[M]={0},player_a[M]={0};

*A=*B=0;

while(answer||player)

{

answer_a[i]=answer%10;

player_a[i++]=player%10;

answer/=10;

player/=10;

}

for(i=0;i

for(j=0;j

if(player_a[i]==answer_a[j])

if(i==j) ++*A;

else ++*B;

}

//参数AB是上一轮猜测的反馈,

//如果得到猜中的信息表示下一把的开始

int guess(int A,int B)

{

----------------------------------------------

//你的工作在这个函数

int x;

return x;

----------------------------------------------

}

int main()

{

srand(2);

int i;

//初始生成数据

int len;

for(len=1,i=0;i

len*=10-i;

int a[len];

gen(a);

//开玩

int n=1;//玩n把

int count=0;//总猜测次数

while(n--)

{

//每把从猜中开始,例如玩4个数,4A0B为猜中,

//此时进入下一把,会有新的数供猜测

//printf("%d\n",a[n]);

int A=M,B=0;

int count_cur=0;

do

{

int player=guess(A,B);

++count_cur;

test(a[n],player,&A,&B);

printf("%d:%0*d,%dA%dB\n",count_cur,M,player,A,B);

}while(A!=M||B);

count+=count_cur;

}

return 0;

}

规则与要求:猜数字,计算机随机生成1个3或4位的十进制整数,各个数位上的数字各不相同,用户给出猜测,计算机回答XAYB(X个位置和数字猜中,Y个数字猜中但位置错误),重复用户猜计算机回答的过程,直到猜中为止(3A0B,4A0B)。

这里,将给出若干组相关的数据供猜测(即第i把猜123,第j把不可能是123)。比谁的程序猜测的总次数最少。

文件“猜数字测试代码.txt”是给学生的,函数int guess(int A,int B)是学生需要完成的,其中参数A和B就是计算机根据上次猜测返回的结果,若是3A0B(以猜3个数为例),表示新一把猜测的开始。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值