解决XAXBjava猜数字游戏的游戏有什么好的算法

安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&转载:=编程挑战
相信大家都玩过一种游戏,大概最早在文曲星那些电子词典上的,名字叫猜数字:规则大概是这样的:0-9中随即抽选4个数,组成4位数,(这十个数字可以重复也可以不重复,我们这次仅仅讨论他们不重复的情况,也就是这样的数值是不行的.这样的数值是合法的.)然后你猜这个数值,计算机给出你猜的结果,用xAyB表示,A表示你猜对,并且这个数值的位置也正确的有X个,B表示你猜对,但是位置的错误的数值有Y个.
举一个例子,比如这次要猜的数值是1357:你输入2468,则计算机返回"0A0B",说明你一个也没猜对.连位置不正确的也没有.你输入1234,则计算机返回"1A1B",说明你猜对了一个数值,并且这个数值的位置也正确(1),你猜对了一个数值,但是这个数值的位置错误(3).你输入7351,则计算机返回"2A2B".....然后一步步的根据返回的信息判断,进而猜出正确的答案.
应该很好理解,如果谁想试试的,QQ上面也有这个游戏"互动空间-&小I机器人,输入?,点击智力游戏的猜数字."当上上面说的是机器出题目,人来猜..这次的挑战呢,就反了过来,人来设计一种算法来猜人出的题目,看谁用最短的时间猜出这个答案.也就是写一个软件,替人猜测出这个数字,看谁用的次数最少.这里给出这个问题的通用算法(筛选法):
中不重复的数值有5040个.1.随即抽选一个数字,输出给人,人给出计算机此次猜测的结果(比如是xAyB).2.计算机根据这次猜测的结果对所有的剩下的数字进行筛选,出去不符合的数值.3.从剩下的数值从随即挑选1个,重复1-2的步骤.
最终得到结果.这样的算法效率如下:一步就猜出的数值有: 1二步就猜出的数值有: 13三步就猜出的数值有: 108四步就猜出的数值有: 596五步就猜出的数值有: 1668六步就猜出的数值有: 1768七步就猜出的数值有: 752八步就猜出的数值有: 129九步就猜出的数值有: 5总数5040个.算法我就不给出了,显然,这不是最佳的算法,目前最好的算法是6步以内就可以得到全部的答案(可惜我没找到这个算法,这是种信息摘要算法,先用几步取得大量的信息,然后分析之后用剩下的几步确定答案).下面就欢迎大家参加这个编程挑战所有写出算法,或者有相关算法理论的朋友都帖出自己的咚咚吧.一起试试吧..just do it
#include &iostream&#include &list&#include &vector&#include &string&#include &stdlib.h&//全局VECTOR,用于存储数字集合list&string& void init(void){/////////////初始化VECTOR/////////////// for(int a=0;a&=9;a++){for(int b=0;b&=9;b++){if(a==b)for(int c=0;c&=9;c++){if(c==a || c==b)for(int d=0;d&=9;d++){if(d!=a && d!=b && d!=c){char sa[4]={a+'0',b+'0',c+'0',d+'0'};string temp(sa,sa+4); number.push_back(temp);} } }//c end} }//a end}//fun endbool comp(string ss,string sd,string input){//比较!!如果两个数不符合条件input,则返回false//num_s为vector中的数,num_d为猜测数,input为串 int s[4],d[4];if(ss == sd)//分解 s[0]=ss[0]-'0';s[1]=ss[1]-'0';s[2]=ss[2]-'0';s[3]=ss[3]-'0';d[0]=sd[0]-'0';d[1]=sd[1]-'0';d[2]=sd[2]-'0';d[3]=sd[3]-'0'; //xAyBint x=input[0]-'0'; int y=input[2]-'0'; //comp........do{int xy=x+y;//共匹配的数 int sum=0;for(int i=0;i&4;i++){for(int j=0;j&4;j++){if(s[i]==d[j])sum++;}}if(sum!=xy) // }while(0);do{//绝对匹配x if(x){int sum=0;for(int i=0;i&4;i++){ if(s[i]==d[i])sum++;}if(sum!=x) } }while(0); do{//仅数字匹配,位置不匹配 if(y){int sum=0;for(int i=0;i&4;i++){for(int j=0;j&4;j++){if(s[i]==d[j] && i!=j)sum++;}}if(sum!=y)} }while(0); } void filt(string num,string input){//过滤!! num为猜测数,input为人输入的串list&string&::iterator iter=number.begin();while(iter!=number.end()){list&string&::iterator temp=iter++;//if( comp(*temp,num,input)==false )number.erase(temp);} }string sui_ji(void){//在vector中随机选个数vector&string& temp(number.begin(),number.end());random_shuffle(temp.begin(),temp.end()); return *(temp.begin());} int main(void){
do{init();do{cout&&"输入avalon或者AVALON或者4a4b或者4A4B结束!"&& while( 1){num=sui_ji();cout&&num&&'/t'&&"数据集还有"&&number.size()&&"个数"&&cin&&if( input=="avalon" || input=="AVALON"){list&string&::iterator iter=number.begin();int enter=0;for(;iter!=number.end();iter++){ if(enter++%8==0)cout&& cout&&*iter&&" ";}cout&& }if( input == "4a0b" || input =="4A0B"){cout&&"ok"&&} filt(num,input);} }while(0);//清空vector number.erase(number.begin(),number.end());
cout&&"继续吗?";cin&& }while(quit=="y" || quit=="Y");cout&&"bye~~~~~~~~~~~~~~~~~"&& system("PAUSE"); return 0;}
本文已收录于以下专栏:
相关文章推荐
int a[1005],b[1005...
首先给大家推荐个网站叫LeetCode Online,这是一个刷算法的网站;
今天lz做了一道题,这是原题的链接,猜数字;
题目很简单哈,举个例子
人家先选定个数字,比如说6,然后让你从1-10...
设计一个猜数字游戏的java程序,数字为50到150之间的一个整数,由程序随机生成,程序使用者从键盘输入。
如果大了,提示“猜大了”
如果小了,提示“猜小了”
如果一直则结束程序,保存文件...
A、B两人玩猜字游戏,游戏规则如下:
A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜;
如果B猜的偏小,A会提示B这次猜的偏小;
一旦B某次猜的偏大,A就不再提示,...
问题描述:
&#160;&#160;&#160;&#160;&#160;&#160; A给出在[1,100]之间的一个数,B进行猜数字。游戏规则如下:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1、如果猜...
说明本文是我对第8章28道习题的练习总结,建议配合紫书——《算法竞赛入门经典(第2版)》阅读本文。
另外为了方便做题,我在VOJ上开了一个contest,欢迎一起在上面做:第八章习题contest ...
int main()
scanf(&%d&,&t);
while(t--)
int p=0,k=0;
int sum[10]...
时间限制:3000 ms &#160;|&#160; 内存限制:65535 KB
这有一个迷宫,有0~8行和0~8列:
&#160;1,1,1,1,1,1,1,1,1
&#160;1,0,0,1,0,0,1,0...
他的最新文章
讲师:姜飞俊
讲师:汪木铃
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&&&&&&1A2B 猜数字
1A2B 猜数字
2145次评价
  1A2B是一款十分经典的猜数字游戏,每局开始,AI都会随机生成四个数字,玩家要从最开始的猜测开始,逐步通过AB提示,猜中并完成最终的数字排列。其中的字母A,代表数字的位置和大小完全正确,而字母B则代表数字本身正确,但是位置错误。每局提示的结果,都将会以XAXB的形式展现给玩家。
1A2B 猜数字下载
适用机型:
苹果 iPhone 7 Plus,
苹果 iPhone 7,
苹果 iPhone 6s Plus,
苹果 iPhone 6 Plus,
苹果 iPhone 6s,
苹果 iPhone 6,
苹果 iPhone SE,
苹果 iPhone 4S,
苹果 iPhone 5,
苹果 iPhone 4,
苹果 iPhone 5s 开放版,
苹果 iPhone,
苹果 iPhone 6 移动4G,
苹果 iPhone 3G,
苹果 iPhone 5c,
苹果 iPhone 5s 移动4G,
苹果 iPhone 4(CDMA版),
苹果 iPhone 3GS,1602显示的一个猜数字游戏,带温度显示 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
1602显示的一个猜数字游戏,带温度显示
22:41:51  
& && &由程序生成四位不重复的数,有十次机会猜此数,每次猜的结果以xAxb显示,A表示数字对,位置也对。B表示数字对,位置不对K1:位选择键
K2,K3:加减,同时按K1为上翻下翻
K4:确认键,长按&&温度显示与游戏显切换
K5:背光开关(本人为了省电,可以删掉)
初学单片机,第一次发帖,有不足的地方可以指出来
IMG_857.jpg (269 KB, 下载次数: 0)
22:36 上传
IMG_939.jpg (297.67 KB, 下载次数: 0)
22:37 上传
(325.92 KB, 下载次数: 0)
22:38 上传
22:39 上传
点击文件名下载附件
下载积分: 积分 -1 分
76.2 KB, 下载次数: 18, 下载积分: 积分 -1 分
您的付出是论坛的动力,感谢您一直支持!.
您的付出是论坛的动力,感谢您一直支持!.
23:08:21  
今天刚看这个1602
高级工程师
23:55:33  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
趣味游戏,好
00:23:08  
13:19:23  
不错~早些看我用VC写过猜数字,这也是我最喜欢的游戏之一。
21:35:02  
22:28:50  
16:07:17  
19:33:40  
我以前也做过一个猜数游戏,不过不是随机产生的,而是一个人输入4个数,另一个人猜数。。。
23:27:59  
23:37:04  
00:02:22  
厉害。。牛人众多
16:25:45  
非常不错啊 厉害啊
15:27:22  
助理工程师
11:49:09  
随机数这个号,看看。
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
版权所有 (C) 深圳华强聚丰电子科技有限公司解决XAXB猜数字的游戏有什么好的算法? - 知乎7被浏览1032分享邀请回答2添加评论分享收藏感谢收起0添加评论分享收藏感谢收起

我要回帖

更多关于 猜数字2 m 1 算法 的文章

 

随机推荐