logo资料库

1A2B猜数游戏.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
猜数字,又称 bulls_and_cows,是一种古老的的密码破译类游戏。 通常适于两人或多人一起玩。 以两人游戏为例:由一方先设定一个数字,而另一方来猜。 设定数字的人要想好一个没有重复数字的、十进制的四位数(即四数位、十数码、不含重复 数字),且不能让猜的人知道。然后,猜的人就可以开始“猜数字”了。 猜数方每猜一个数字,出数者就要根据对方所猜的数字给出“几 a 几 b”的回应;其中,a 前面的数字表示位置正确的数的个数,而 b 前的数字表示数字正确而位置不对的数的个数。 举例来说——若出数者设定的正确答案为 2358,而猜的人猜 2485,这时的情况,就是 1a2b; 其中,第一个 2 的数字和位置都已经对了,记为 1a,而 5 和 8 这两个数字对了,位置没对,因 此记为 2b。 同理——若出数者设定的正确答案是 1234,而猜的人猜 4321,那结果就是 0a4b,数字全中, 但位置全错。 以此类推…… 在猜完一轮后,猜的人可再根据上一次猜测时得到的“几 a 几 b”情况接续推理,直到猜中 正确答案(即 4a0b)为止。 ………… 这并不是一个特别复杂的游戏,但它涉及到了记忆、推理、计算和运气等诸多因素,玩起 来……也并没有那么简单。 因此,当主办者说出“猜数字”这三个字后,底下的人也都各自在心里打起了算盘。 而他们的反应,自然也都在主办者的意料之中…… 主办者并没有停顿太久,便接着说道:“当然了,不可能是普通的猜数字,因为那太容易了…… 无论是采用标准规则(四数位、十数码、不含重复数字),还是 mastermind 规则(四数位、六数 码、含重复数字),只要掌握了正确的解法。七次左右就一定能猜出来,运气好的五次以内就行……” 他顿了顿,“所以……我稍稍提高了难度,改为了——六数位、十数码、含重复数字。” 提示答案换算 H I 0 1 3 6 7 J K L M N O P Q 2 9 8 4 5
#include #include #include #include int red[8]={0}; void zdy(); void record(); void mode(); void ccc(int wei,int ma,int chong,int mod); //标准规则(四数位、十数码、不含重复数字) //mastermind 规则(四数位、六数码、含重复数字) //六数位、十数码、含重复数字。 int main() { int keep=0; printf("木有教程:请按空格+回车跳过。。。\n"); while(getchar()!=' '); getchar(); while(keep!=-1) { printf("猜猜猜数字\n(1)、新游戏\n(2)、最新纪录\n(3)、退出\n(输入括弧中的序号并确 定)\n"); scanf("%d",&keep); //getchar(); switch(keep) { case 1:mode();keep=0;break; case 2:record();keep=0;break; case 3:keep=-1;break; default :printf("抱歉,没有这个选项,请重新输入\n\n\n\n");keep=0;break; } } return 0; } void mode() { int keep=0; while(keep!=-1) { printf("(1)、标准规则(四数位、十数码、不含重复数字)\n(2)、mastermind 规则(四 数位、六数码、含重复数字)\n(3)、六数位、十数码、含重复数字。\n(4)、自定义\n(5)、 返回\n"); scanf("%d",&keep);
switch(keep) { case 1:ccc(4,10,0,0);keep=-1;break; case 2:ccc(4,6,1,2);keep=-1;break; case 3:ccc(6,10,4,4);keep=-1;break; case 4:zdy();keep=-1;break; case 5:keep=-1;break; default :printf("抱歉,没有这个选项,请重新输入\n\n");keep=0;break; } } } void zdy() { int wei,ma,chong; printf("请依次输入位数(1~9),进制数(1~10),和是否含重复数字(1、是,0、否)\n(各 数字间用空格或回车隔开)\n"); scanf("%d%d%d",&wei,&ma,&chong); ccc(wei,ma,chong,6); } void ccc(int wei,int ma,int chong,int mod) { int t,temp=0,number,i,j,k=0,a,b,ture[wei],cai[wei]; char ch; srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样 t=time(NULL); for(i=0;i
} } ture[i]=number; ch=number+'H'; printf("%c ",ch); } putchar('\n'); while(1) { scanf("%d",&k); for(i=wei-1;i>=0;i--) { cai[i]=k%10; k=k/10; } for(a=b=j=0;j
void record() { printf("\t\t 模式\t\t 次数\t\t 用时\n"); printf("\t\t 模式 1\t\t%d\t\t%d\n",red[0],red[1]); printf("\t\t 模式 2\t\t%d\t\t%d\n",red[2],red[3]); printf("\t\t 模式 3\t\t%d\t\t%d\n",red[4],red[5]); printf("\t\t 自定义\t\t%d\t\t%d\n",red[6],red[7]); }
分享到:
收藏