2692 假币问题(枚举——数学模型中包含多个变量)
2018-02-07 22:19
501 查看
描述赛利有12枚银币。其中有11枚真币和1枚假币。假币看起来和真币没有区别,但是重量不同。但赛利不知道假币比真币轻还是重。于是他向朋友借了一架天平。朋友希望赛利称三次就能找出假币并且确定假币是轻是重。例如:如果赛利用天平称两枚硬币,发现天平平衡,说明两枚都是真的。如果赛利用一枚真币与另一枚银币比较,发现它比真币轻或重,说明它是假币。经过精心安排每次的称量,赛利保证在称三次后确定假币。输入第一行有一个数字n,表示有n组测试用例。
对于每组测试用例:
输入有三行,每行表示一次称量的结果。赛利事先将银币标号为A-L。每次称量的结果用三个以空格隔开的字符串表示:天平左边放置的硬币
天平右边放置的硬币 平衡状态。其中平衡状态用``up'', ``down'', 或 ``even''表示,
分别为右端高、右端低和平衡。天平左右的硬币数总是相等的。 输出输出哪一个标号的银币是假币,并说明它比真币轻还是重(heavy or light)。样例输入
样例输出
对于每组测试用例:
输入有三行,每行表示一次称量的结果。赛利事先将银币标号为A-L。每次称量的结果用三个以空格隔开的字符串表示:天平左边放置的硬币
天平右边放置的硬币 平衡状态。其中平衡状态用``up'', ``down'', 或 ``even''表示,
分别为右端高、右端低和平衡。天平左右的硬币数总是相等的。 输出输出哪一个标号的银币是假币,并说明它比真币轻还是重(heavy or light)。样例输入
1 ABCD EFGH even ABCI EFJK up ABIJ EFGH even
样例输出
K is the counterfeit coin and it is light.
1 /* 2 数学模型中包含多个变量的例子 3 问题 给出三组称量方式及其结果,判断出十二个金币中哪个是假币,并且说明是比真币重还是比真币轻 4 解题思路 :首先想到的是共12个金币,且每个金币有两种情况,所以采用枚举法,变量分别是每个金币的编号x和轻重2 5 在所有可能的24种猜测中,枚举每个金币及其轻重,当满足所有条件时为假设成立*/ 6 #include<stdio.h> 7 #include<string.h> 8 int judge(int x,int w); 9 char left[3][10],right[3][10],result[3][10]; 10 int main() 11 { 12 int t; 13 scanf("%d",&t); 14 int i; 15 while(t--) 16 { 17 for(i=0;i<=2;i++) 18 scanf("%s%s%s",left[i],right[i],result[i]); 19 int x,w; 20 for(x=0;x<=11;x++) 21 { 22 if(judge(x,0)) 23 { 24 printf("%c is the counterfeit coin and it is light.\n",x+'A'); 25 break; 26 } 27 if(judge(x,1)) 28 { 29 printf("%c is the counterfeit coin and it is heavy.\n",x+'A'); 30 break; 31 } 32 } 33 } 34 return 0; 35 } 36 int judge(int x,int w) 37 { 38 int i; 39 for(i=0;i<=2;i++) 40 { 41 if(!strcmp(result[i],"even"))//strcmp函数的使用,相同时返回0,前者的字典序大于后者时返回1,反之返回0 42 { 43 if(strchr(left[i],x+'A') != NULL || strchr(right[i],x+'A') != NULL) 44 return 0; 45 } 46 if(!strcmp(result[i],"up")) 47 { 48 if(w==0 && strchr(left[i],x+'A') != NULL) 49 return 0; 50 if(w==1 && strchr(right[i],x+'A') != NULL) 51 return 0; 52 } 53 if(!strcmp(result[i],"down")) 54 { 55 if(w==0 && strchr(right[i],x+'A') != NULL) 56 return 0; 57 if(w==1 && strchr(left[i],x+'A') != NULL) 58 return 0; 59 } 60 } 61 return 1; 62 } 63 /*错误分析 64 注意strcmp函数的使用 65 strchr的使用,找到返回第一次出现时的指针,找不到返回BULL*/
相关文章推荐
- OpenJudge百炼-2692-假币问题-C语言-枚举
- 数学模型中包括多个变量的例子:称硬币
- Yii2 利用场景解决一个表单多个模型属性的required问题。
- 【原创】IrrLicht中ms3D模型不支持多个贴图问题的解决
- C语言中全局变量的定义及重复包含问题
- JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
- treeview问题.每个结点包含多个值的实现。(添加、删除、拖拉、连接数据库等
- BITED数学建模七日谈之五:怎样问数学模型问题
- Activity中包含多个Fragment,Afragment中嵌套ViewPager,在第二次切换到Afragment时Viewpager内容被清空的问题解决
- 基于矩阵的流程数学模型的一个小问题
- 关于vc工程包含多个lib库老是提示无法打开问题
- 算法问题《Card Game》的数学模型和Java实现
- 今天遇到一个定义一个枚举变量的问题。
- EasyUI datagrid不能绑定数据问题,要注意返回模型中不能包含DataTime格式数据
- 地图区域划分转换成数学模型解决问题
- servlet---知识点深化---重定向/转发/字节流字符流共存问题/多个servlet输出问题/请求包含
- poj 2692 假币问题
- 指派问题的数学模型
- TF 中保存恢复模型时,关于变量的name问题