描述

Sally Jones 有十几个 Voyageur 银元。然而,只有 11 枚硬币是真正的银元;一枚硬币是伪造的,即使它的颜色和大小使其与真正的银元无法区分。假币与其他硬币的重量不同,但 Sally 不知道它比真币重还是轻。
幸运的是,莎莉有一个朋友借给她一个非常准确的天平秤。这位朋友将允许莎莉称重三下以找到假币。例如,如果 Sally 将两枚硬币相互称重并且天平保持平衡,那么她就知道这两枚硬币是真实的。现在如果莎莉重
一枚真硬币与第三枚硬币之间的天平不平衡,那么莎莉知道第三枚硬币是假币,她可以分别根据放置它​​的天平是上升还是下降来判断它是轻还是重。
通过仔细选择她的称量,Sally 能够确保她能找到恰好三个称量的假币。

输入

输入的第一行是一个整数 n (n > 0),指定要遵循的案例数。每个案例由三行输入组成,每个称重行。Sally 用字母 A--L 识别了每枚硬币。关于称重的信息将由两串字母给出,然后是单词“up”、“down”或“even”中的一个。第一串字母代表左边余额中的硬币;第二个字符串,硬币在正确的平衡。(Sally 将始终将相同数量的硬币放在右侧天平上和左侧天平上。)第三个位置的单词将说明天平的右侧是上升、下降还是保持平衡。

输出

对于每种情况,输出将通过字母识别假币并判断它是重还是轻。解决方案将始终是唯一确定的。

样本输入

ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even

样本输出

K is the counterfeit coin and it is light. 

解题思路

我们从十二枚硬币中依次假设,猜想它是轻的或者重的然后通过三次的称重结果判断是否成立,如果成立则说明我们的猜想正确,输出结果;如果不成立则继续猜下一枚硬币。
#include<iostream>
#include<cstring>
using namespace std;
bool IsFake(char c,bool light); //判断假设是否成立,成立返回true,不成立返回false
char Left[3][7];    //用于存储三次左侧存放的硬币
char Right[3][7];   //用于存储三次右侧存放的硬币
char Result[3][7];  //用于存储三次称量的结果
int main()
{int n;cin>>n;while(n--){for(int i=0;i<3;i++)cin>>Left[i]>>Right[i]>>Result[i];for(char c='A';c<='L';c++){if(IsFake(c,true))   //假设c是假币且是轻的 {cout<<c<<" is the counterfeit coin and it is light.\n";}else if(IsFake(c,false))    //假设c是假币且是重的 {cout<<c<<" is the counterfeit coin and it is heavy.\n";}}}
}
bool IsFake(char c,bool light)
{for(int i=0;i<3;i++){char *pLeft,*pRight; if(light){pLeft=Left[i];  //假设硬币轻的情况 pRight=Right[i];}else {pLeft=Right[i]; //假设硬币重的情况,为了不再写一条switch所以将指针互换 pRight=Left[i];}switch(Result[i][0]){case 'e': if(strchr(pRight,c) || strchr(pLeft,c)) return false;  //平衡,如果c在天平中则说明c不是假的 break;case 'u':if(strchr(pRight,c)==NULL) return false; //右侧轻,如果c在右侧说明假设成立,为空则c不在右侧假设错误 break;    case 'd':if(strchr(pLeft,c)==NULL) return false;        //右侧重,左侧轻,如果c在左侧说明假设成立,为空则c不在左侧假设错误  break;}}return true;
}

成功AC,但还有更省事一点的,就是当出现平衡状态时,说明在称重的硬币都是真的,所以可以跳过这些硬币,不用遍历十二枚硬币来判断。代码就不给出了,大家可以自己去试试。

cjl

poj1013 假硬币相关推荐

  1. 硬币 假硬币 天平_小东西叫硬币

    硬币 假硬币 天平 During the last 1,5 years, I've been traveling a lot. Apart from my must-have things like ...

  2. 分治应用--万里挑一 找假硬币

    文章目录 1. 问题描述 2. 解题思路 3. 代码实现 1. 问题描述 n 个硬币中有1枚是假币,真假币唯一的区别是假币重量轻,如何快速找出假币 2. 解题思路 暴力做法,一个一个的称重,O(n)复 ...

  3. 算法——从9个硬币中找出其中的1枚假硬币

    9个硬币,其中有一个硬币是假的(不知道其比真的硬币轻或重),问:最少称多少次能找出这枚假硬币? 首先将硬币3等分: 第1次称重 任意两份进行,有两种情况: 第2次称重 以第一次称重不等的那组为基础,即 ...

  4. 硬币问题(随机生成假硬币 找出它的位置)

    一.问题描述 如果有16个硬币,都是一元的 重量是6g,其中有1个是假硬币重量是5g,要求找出假的那个? 实现要求: (1)需要一个数组 int a[17]; (2)所有数组一开始全部给初始值6 (3 ...

  5. 有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。

    有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻.要求仅使用一个天平,使用最少的重量比较次数找出假硬币. 将n个硬币分成数量相同的两堆,如果n为偶数,每堆的硬币个数为n/2: 如 ...

  6. POJ1013 称硬币

    有12枚硬币.其中有11枚真币和1枚假币.假币和真 币重量不同,但不知道假币比真币轻还是重.现在, 用一架天平称了这些币三次,告诉你称的结果,请你 找出假币并且确定假币是轻是重(数据保证一定能找 出来 ...

  7. POJ 1013 Counterfeit Dollar 称硬币

    12个硬币,有一个假的 或轻或重,找出假硬币 开始用的模拟,考虑很多情况 后来,lmy说轻的-1,重的+1,学数学的看什么都是数字,orz 模拟写的两个差不多的代码: (一) #include< ...

  8. (2013.05.05)N枚硬币找1枚假币

    N枚硬币找1枚假币 ――Neicole (2013.05.05) 0. 问题描述 共有N枚硬币,一个天平,在这N枚硬币中有一枚假币,设法找出该枚假币. 1. 原理示例(减治法) 概要: 如上图所示,假 ...

  9. pow函数 真假硬币

    问题 H: 22-函数-2-真假硬币 题目描述 小南利用周末的时间去帮助菜场的李叔卖菜,收到了一个一元的假硬币,晚上结账时不小心把它混进一堆真币里面去了.现在知道假币的重量比真币的质量要轻.现在有一个 ...

最新文章

  1. java 显示c控制台程序窗口,Windows-如何清除C中的控制台屏幕?
  2. 智能循迹避障小车C语言程序编写思路,设计一个循迹避障一体的智能小车的资料和代码及电路图详细概述...
  3. boost::diagnostic_information_what的用法程序
  4. 使用支持向量机进行光学字符识别_从零推导支持向量机 (SVM)
  5. hdfs中与file数组类似的数组_Chapter05 Java中的数组
  6. 攻城时服务器维护,8月31日服务器维护更新公告
  7. 计量经济学建模_一分钟看完计量经济学
  8. 【BZOJ2437】【codevs1949】兔兔与蛋蛋游戏,博弈+二分图匹配
  9. zTree树形控件讲解
  10. 那些年面过的坑,都在这里了~
  11. spring scheduled定时任务
  12. 如何移植Android源码里面的东西到NDK
  13. 【收藏推荐】Markdown常用LaTeX数学符号公式
  14. code::blocks自动补全诸如socket或者其它一些库中的函数
  15. OpenGL 透视投影 齐次裁剪空间 深度缓存
  16. 智能工厂体系,主要划分为哪五个层级?
  17. IDEA开发中包(package)的作用
  18. 十二星座日期、性格、特性查询表
  19. Python 带你走进哈利波特的魔法世界
  20. Word2vec Parameter Learning Explained (UMich 2016)

热门文章

  1. OpenCV学习笔记_2_视频读取和保存
  2. elementUI表格table的列内置样式修改方法/对比template,列属性class-name,table属性cell-class-name
  3. fantouch os Android 7,Funtouch OS 升级安卓7.1,vivo用户福利来了
  4. matplotlib之pyplot模块——添加次坐标轴(第二坐标轴)(twinx())
  5. js实现九宫格抽奖功能
  6. Bash与Csh的区别
  7. Java 实现QQ第三方登录
  8. 用数据分析大家最喜欢什么类型的抖音视频。
  9. 【看表情包学Linux】进程地址空间 | 区域和页表 | 虚拟地址空间 | 初识写时拷贝
  10. 多模态预训练模型简介