枚举—案例(称硬币poj1013)
来源:互联网 发布:湘北 陵南 数据 编辑:程序博客网 时间:2024/06/05 18:07
对于每组测试用例:
输入有三行,每行表示一次称量的结果。赛利事先将银币标号为 A-L。每次称量的结果用三个以空格隔开的字符串表示:天平左边放置的硬币 天平右边放置的硬币 平衡状态。其中平衡状态用``up'', ``down'', 或 ``even''表示, 分别为右端高、右端低和平衡。天平左右的硬币数总是相等的。
1
ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even
样例输出
K is the counterfeit coin and it is light.
问题分析:
将所有数据输入处理好以后,
1、最简单的做法就是一个一个硬币的判断是不是真币;
2.
(1)对于每一个硬币先假设是假币,并且是轻的进行判断;
然后验证是否是和假设是一致的,如果不是一致的,表示是真币,否则表示是一致的(将进行(2)的操作);
(2)对于每一个硬币先假设是假币并且是重的进行判断;
然后验证是否是和假设是一致的,如果不是一致的,表示是真币,否则表示是一致的;
#include <iostream>#include <cstring>using namespace std;char zuo_bian[3][7];char you_bian[3][7];char result[3][7];bool jugde_light(char c) //该硬币是假的且轻的就返回ture;否则就返回false{ for(int i = 0;i<3;i++){ if(!strcmp(result[i], "up")){ if(strchr(you_bian[i], c)==NULL)//如果找不到 return false;//表示不是假的且轻的硬币 } else if(!strcmp(result[i], "down")){//如果找不到 if(strchr(zuo_bian[i], c)==NULL) return false;//表示不是假的且轻的硬币 } else if(!strcmp(result[i], "even")){ if(strchr(zuo_bian[i], c)||strchr(you_bian[i],c))//如果左边或者是右边找到了; return false;//表示不是假的且轻的硬币 } } return true;//表示不是真币}bool jugde_heavy(char c){ for(int i = 0;i<3;i++){ if(!strcmp(result[i], "up")){ if(strchr(zuo_bian[i], c)==NULL)//如果找不到 return false;//表示不是假的且重的硬币 } else if(!strcmp(result[i], "down")){//如果找不到 if(strchr(you_bian[i], c)==NULL) return false;//表示不是假的且重的硬币 } else if(!strcmp(result[i], "even")){ if(strchr(zuo_bian[i], c)||strchr(you_bian[i],c))//如果左边或者是右边找到了; return false;//表示不是假的且重的硬币 } } return true;//表示不是真币}int main(){ int n; cin>>n; while(n--){ for(int i = 0;i<3;i++) for(int j = 0;j<6;j++) zuo_bian[i][j] = you_bian[i][j] = result[i][j] = '\0'; for(int i = 0;i<3;i++) cin>>zuo_bian[i]>>you_bian[i]>>result[i];/*测试 for(int i = 0;i<3;i++){ cout <<zuo_bian[i]<<" "; cout <<you_bian[i]<<" "; cout <<result[i]<<" "; cout <<endl; } cout <<endl; */ for(char i = 'A';i<='L';i++){ if(jugde_light(i))//判断是不是轻的假币; {cout<<i<<" is the counterfeit coin and it is light."<<endl;break;} else if(jugde_heavy(i))//判断是不是重的假币; {cout<<i<<" is the counterfeit coin and it is heavy."<<endl;break;} } } return 0;}
阅读全文
0 0
- 枚举—案例(称硬币poj1013)
- POJ1013称硬币
- POJ1013 称硬币
- POJ1013称硬币
- 第一周 枚举 例题4.称硬币 [POJ1013]
- poj1013 Counterfeit Dollar 称硬币
- 枚举——称硬币
- 枚举:称硬币问题
- 算法学习之枚举--称硬币
- POJ1013秤硬币
- 称硬币;
- 称硬币
- 称硬币
- 称假币(枚举)
- 038day(枚举例题(称硬币)的练习和类和对象的基本概念的初步了解)
- Counterfeit Dollar(poj1013暴力枚举)
- 硬币称重问题之POJ1013-Counterfeit Dollar
- 称硬币问题
- fmt:formatDate和fmt:formatNumber的使用
- 输出菱形
- 简单的mybatis工具类的解析,学习
- 20171102
- 基本概念
- 枚举—案例(称硬币poj1013)
- SSL/TLS 双向认证(一) -- SSL/TLS工作原理
- Python 基础学习
- IDA常见宏定义
- 2017.11.2 树上期望DP 解题报告
- 等待一审四个月以上
- ROS常见错误及解决
- SmartView函数HypSetActiveConnection使用
- css样式优先级总结