poj1013 模拟
来源:互联网 发布:淘宝上有意思的东西 编辑:程序博客网 时间:2024/05/17 22:21
/*题意:有十二枚硬币,其中一枚是假币,真币的重量相同,假币比真币轻或重。现给出三组称重的结果,求哪枚是假币,并判断比真币轻或重。输入:左边的硬币,右边的硬币,右边硬币的结果(even/up/down) 左右两侧的硬币数量是一样的输出:假币及其重量(heavy/light)算法:模拟难度:* */#include <iostream>#include <string>using namespace std;const int COUNT = 12; int ans[COUNT];// 返回两堆硬币称重的结果 string weight(string str1,string str2){int len = str1.length();int w1, w2;w1 = w2 = 0;for (int i=0; i<len; i++){w1 += ans[str1[i]-'A'];w2 += ans[str2[i]-'A'];}if (w1 == w2){return "even";}else if (w1 > w2){return "up";}else{return "down";}}// 初始化数据ans void init(){for (int i=0; i<COUNT; i++){ans[i] = 0;}}int main(){int n;scanf("%d", &n);string left[3],right[3],result[3];while (n--){init();for (int i=0; i<3; i++){cin >> left[i] >> right[i] >> result[i];int len = left[i].length();for (int j=0; j<len; j++){ans[right[i][j]-'A'] = 1;ans[left[i][j]-'A'] = 1;}}int num;string counterfeit ; for (int i=0; i<COUNT; i++){// 对每个被称过的硬币 if (ans[i] > 0){// 假设第i个硬币是假币,而且是轻的 ans[i] -= 1;int j;for (j=0; j<3; j++){if (weight(left[j],right[j]) != result[j]){break;}}if (j >= 3){counterfeit = "light";num = i;break;}// 假设第i个硬币是假币,而且是重的 ans[i]+=2;for (j=0; j<3; j++){if (weight(left[j],right[j]) != result[j]){break;}}if (j >= 3){counterfeit = "heavy";num = i;break;}ans[i] -= 1;}}cout << char('A'+num) << " is the counterfeit coin and it is " << counterfeit << "." << endl;}}
0 0
- poj1013 模拟
- poj1013 模拟
- POJ1013(模拟题)
- POJ1013-水模拟-Counterfeit Dollar
- POJ1013
- POJ1013
- POJ1013
- POJ1013
- poj1013
- poj1013
- poj1013
- poj1013
- poj1013
- poj1013
- CounterfeitCoin POJ1013
- 瞎搞poj1013
- POJ1013解题报告
- POJ1013 Counterfeit Dollar
- 矩阵相关概念笔记
- 散列的数组
- js监听页面的scroll事件,当移到底部时触发事件
- tomcat
- 为什么java.net.URLEncoder.encode方法要调用两次而不是一次呢?
- poj1013 模拟
- 关于百度富文本配置,应用及将其存入数据库
- 安装mongodb副本分片集群
- 串口自适应波特率的设置方法
- Java的反射(Reflection)、内省(Retrospector)和beanUtils工具
- html上的分享功能(jinthis)
- 《9》模版方法模式
- 三天学会HTML5——SVG和Canvas的使用
- Java回调函数使用