题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1172
题目描述:
猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,
然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。
比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,
而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。
如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。
Input
输入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。
接下来的N行中,每行三个整数A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,
其中C个在正确的位置上。当N=0时,输入数据结束。
Output
每组输入数据对应一行输出。如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。
解题思路:暴力,就是暴力。
/*暴力出奇迹,逆向试数 把所有的四位数都判断一遍,如果解=1,则输出,否则Not sure ,竟然能AC,我也是醉了*/ #include<stdio.h>int main(){ int a[110],b[110],c[110]; //a=问答中的数,b=猜对的个数,c=正确的数 int i,s,k; //s所有的四位数 int n; //n次问答 int a1,a2,a3,a4; //s数中提取的四位数 int b1,b2,b3,b4; //a[i]测试数中提取的四位数 int bb,cc; //判断条件b和条件c 是否符合 int e[11],d[11]; //记录该数出现次数,因为问答次数很多,需要更改数组和模版记录数组 int z,j,l; //z为符合状态, j为符合的个数,l保存符合的数 while(~scanf("%d",&n),n) { for(i=1;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]); j=0; for(s=1000;s<=9999;s++) //s从1000到9999开始暴力试数,题中说四位数,所以不算0开头 { z=1; //状态开始为合理(1) for(i=0;i<10;i++) //d[i]记录s提取数出现的次数 先全部置零 d[i]=0; a4=s%10; //a4~a1为 s数中提取的四位数 a3=s/10%10; a2=s/100%10; a1=s/1000; d[a1]++; //提取后,该数出现的次数进行累加 d[a2]++; d[a3]++; d[a4]++; /* printf("%d~%d~%d~%d\n",a1,a2,a3,a4); for(i=0;i<10;i++) printf("%d ",e[i]); printf("\n"); */ for(i=1;i<=n;i++) //开始测试n种问答是否合理 { bb=0; //b条件和c条件置零 cc=0; b4=a[i]%10; //提取测试数的四位数 b3=a[i]/10%10; b2=a[i]/100%10; b1=a[i]/1000; // printf("%d~%d~%d~%d\n",b1,b2,b3,b4); for(k=0;k<10;k++) //将模版d[i]赋值给e[i] e[k]=d[k]; //因为e[i]每次循环都要复原,所以需要模版d[i] if(e[b1]) //如果e[i]出现过,那么bb+1,同时e[i]本身次数-1 { bb++; e[b1]--; } if(e[b2]) { bb++; e[b2]--; } if(e[b3]) { bb++; e[b3]--; } if(e[b4]) { bb++; e[b4]--; } if(a1==b1) //c条件判断 cc++; if(a2==b2) cc++; if(a3==b3) cc++; if(a4==b4) cc++; //printf("%d,%d\n",bb,cc); if(bb!=b[i]||cc!=c[i]) //如果出现过不符合的情况,z状态=0,跳出本数的测试 { z=0; break; } } if(z) //如果经过所有的问答后,z状态还=1,该数符合条件 { l=s; //先记录先该数 j++; //计算符合条件的总个数 }}//printf("%d\n",j); if(j==1) //j只能等于1,若大于则答案不唯一,若=0则无解 printf("%d\n",l); else printf("Not sure\n");}return 0;}
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦