poj1013 假硬币
描述
幸运的是,莎莉有一个朋友借给她一个非常准确的天平秤。这位朋友将允许莎莉称重三下以找到假币。例如,如果 Sally 将两枚硬币相互称重并且天平保持平衡,那么她就知道这两枚硬币是真实的。现在如果莎莉重
一枚真硬币与第三枚硬币之间的天平不平衡,那么莎莉知道第三枚硬币是假币,她可以分别根据放置它的天平是上升还是下降来判断它是轻还是重。
通过仔细选择她的称量,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 假硬币相关推荐
- 硬币 假硬币 天平_小东西叫硬币
硬币 假硬币 天平 During the last 1,5 years, I've been traveling a lot. Apart from my must-have things like ...
- 分治应用--万里挑一 找假硬币
文章目录 1. 问题描述 2. 解题思路 3. 代码实现 1. 问题描述 n 个硬币中有1枚是假币,真假币唯一的区别是假币重量轻,如何快速找出假币 2. 解题思路 暴力做法,一个一个的称重,O(n)复 ...
- 算法——从9个硬币中找出其中的1枚假硬币
9个硬币,其中有一个硬币是假的(不知道其比真的硬币轻或重),问:最少称多少次能找出这枚假硬币? 首先将硬币3等分: 第1次称重 任意两份进行,有两种情况: 第2次称重 以第一次称重不等的那组为基础,即 ...
- 硬币问题(随机生成假硬币 找出它的位置)
一.问题描述 如果有16个硬币,都是一元的 重量是6g,其中有1个是假硬币重量是5g,要求找出假的那个? 实现要求: (1)需要一个数组 int a[17]; (2)所有数组一开始全部给初始值6 (3 ...
- 有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。
有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻.要求仅使用一个天平,使用最少的重量比较次数找出假硬币. 将n个硬币分成数量相同的两堆,如果n为偶数,每堆的硬币个数为n/2: 如 ...
- POJ1013 称硬币
有12枚硬币.其中有11枚真币和1枚假币.假币和真 币重量不同,但不知道假币比真币轻还是重.现在, 用一架天平称了这些币三次,告诉你称的结果,请你 找出假币并且确定假币是轻是重(数据保证一定能找 出来 ...
- POJ 1013 Counterfeit Dollar 称硬币
12个硬币,有一个假的 或轻或重,找出假硬币 开始用的模拟,考虑很多情况 后来,lmy说轻的-1,重的+1,学数学的看什么都是数字,orz 模拟写的两个差不多的代码: (一) #include< ...
- (2013.05.05)N枚硬币找1枚假币
N枚硬币找1枚假币 ――Neicole (2013.05.05) 0. 问题描述 共有N枚硬币,一个天平,在这N枚硬币中有一枚假币,设法找出该枚假币. 1. 原理示例(减治法) 概要: 如上图所示,假 ...
- pow函数 真假硬币
问题 H: 22-函数-2-真假硬币 题目描述 小南利用周末的时间去帮助菜场的李叔卖菜,收到了一个一元的假硬币,晚上结账时不小心把它混进一堆真币里面去了.现在知道假币的重量比真币的质量要轻.现在有一个 ...
最新文章
- java 显示c控制台程序窗口,Windows-如何清除C中的控制台屏幕?
- 智能循迹避障小车C语言程序编写思路,设计一个循迹避障一体的智能小车的资料和代码及电路图详细概述...
- boost::diagnostic_information_what的用法程序
- 使用支持向量机进行光学字符识别_从零推导支持向量机 (SVM)
- hdfs中与file数组类似的数组_Chapter05 Java中的数组
- 攻城时服务器维护,8月31日服务器维护更新公告
- 计量经济学建模_一分钟看完计量经济学
- 【BZOJ2437】【codevs1949】兔兔与蛋蛋游戏,博弈+二分图匹配
- zTree树形控件讲解
- 那些年面过的坑,都在这里了~
- spring scheduled定时任务
- 如何移植Android源码里面的东西到NDK
- 【收藏推荐】Markdown常用LaTeX数学符号公式
- code::blocks自动补全诸如socket或者其它一些库中的函数
- OpenGL 透视投影 齐次裁剪空间 深度缓存
- 智能工厂体系,主要划分为哪五个层级?
- IDEA开发中包(package)的作用
- 十二星座日期、性格、特性查询表
- Python 带你走进哈利波特的魔法世界
- Word2vec Parameter Learning Explained (UMich 2016)
热门文章
- OpenCV学习笔记_2_视频读取和保存
- elementUI表格table的列内置样式修改方法/对比template,列属性class-name,table属性cell-class-name
- fantouch os Android 7,Funtouch OS 升级安卓7.1,vivo用户福利来了
- matplotlib之pyplot模块——添加次坐标轴(第二坐标轴)(twinx())
- js实现九宫格抽奖功能
- Bash与Csh的区别
- Java 实现QQ第三方登录
- 用数据分析大家最喜欢什么类型的抖音视频。
- 【看表情包学Linux】进程地址空间 | 区域和页表 | 虚拟地址空间 | 初识写时拷贝
- 多模态预训练模型简介