| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2598 人关注过本帖, 1 人收藏
标题:猜数字项目最简算法,比谁的程序猜测总次数最少
只看楼主 加入收藏
qianqian丶
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-8-31
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:8 
猜数字项目最简算法,比谁的程序猜测总次数最少
本人新的不能再新的小萌新一只,恳请各位大佬帮我解决下这个问题,感激涕零;
以下为原题:
  猜数字,计算机随机生成1个3或4位的十进制整数,各个数位上的数字各不相同,用户给出猜测,计算机回答XAYB(X个位置和数字猜中,Y个数字猜中但位置错误),重复用户猜计算机回答的过程,直到猜中为止(3A0B,4A0B)。
  现给出原码,要求计算机随机生成1个3或4位的十进制整数,各个数位上的数字各不相同,由计算机来猜测,比谁的程序猜测的总次数最少。
以下为原码 (需要完成的是函数int guess(int A,int B))
#include <stdio.h>
#include <stdlib.h>
#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<n;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<M;++i,max*=10);   
for(i=0;i<max;++i)
{
_Bool flag[10]={0};
int t=i;
for(j=0;j<M;++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<M;++i)
for(j=0;j<M;++j)
   if(player_a[i]==answer_a[j])
   if(i==j) ++*A;
     else ++*B;

}
//参数AB是上一轮猜测的反馈,
//如果得到猜中的信息表示下一把的开始
int guess(int A,int B)
{
//你的工作在这个函数
int x;
scanf("%d",&x);
return x;
}
int main()
{
   srand(2);
   int i;
//初始生成数据
   int len;
   for(len=1,i=0;i<M;++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;
}
搜索更多相关主题的帖子: 数字 int for count player 
2017-08-31 14:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:15 

DO IT YOURSELF !
2017-08-31 15:12
qianqian丶
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-8-31
收藏
得分:0 
回复 2楼 wp231957
不是这个意思,不是人来猜,就是说由计算机来猜数字,用的步数越少越好这样
2017-08-31 15:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
那这是???
各个数位上的数字各不相同,用户给出猜测,计算机回答XAYB

DO IT YOURSELF !
2017-08-31 16:23
qianqian丶
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-8-31
收藏
得分:0 
回复 4楼 wp231957
额,这是原题,还有后面的“现给出原码,要求计算机随机生成1个3或4位的十进制整数,各个数位上的数字各不相同,由计算机来猜测,比谁的程序猜测的总次数最少。”这句,大佬能不能帮我看看
2017-08-31 16:27
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我給你的链接中我的代码。你看了没

DO IT YOURSELF !
2017-08-31 16:46
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
这个还要计算位置有点复杂~先要试出4-XBXA再慢慢调试~主要思想还是用排除法~

[此贴子已经被作者于2017-8-31 18:11编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-08-31 18:03
香的七仔
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-9-2
收藏
得分:0 
你怕是东软的吧。这几天就要交作业???
2017-09-02 12:31
qianqian丶
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-8-31
收藏
得分:0 
回复 8楼 香的七仔
2017-09-05 13:35
快速回复:猜数字项目最简算法,比谁的程序猜测总次数最少
数据加载中...
 
   



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

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