首页 / 算法 / 程序设计与算法笔记之称硬币
程序设计与算法笔记之称硬币
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了程序设计与算法笔记之称硬币,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1919字,纯文字阅读大概需要3分钟。
内容图文
![程序设计与算法笔记之称硬币](/upload/InfoBanner/zyjiaocheng/643/16fe400d4c9d4626a9bd902220463c82.jpg)
称硬币
有12枚硬币。其中有11枚真币和1枚假币。假币和真
币重量不同,但不知道假币比真币轻还是重。现在,
用一架天平称了这些币三次,告诉你称的结果,请你
找出假币并且确定假币是轻是重(数据保证一定能找
出来)。
? 输入
第一行是测试数据组数。
每组数据有三行,每行表示一次称量的结果。银币标号
为A-L。每次称量的结果用三个以空格隔开的字符串表示:
天平左边放置的硬币 天平右边放置的硬币 平衡状态。其
中平衡状态用up'',
down’’, 或 even''表示, 分 别为右端高、右端低和平衡。天平左右的硬币数总是相等 的。 ? 输出 输出哪一个标号的银币是假币,并说明它比真币轻还是重。 例题:POJ1013 称硬币 ? 输入样例 1 ABCD EFGH even ABCI EFJK up ABIJ EFGH even ? 输出样例 K is the counterfeit coin and it is light. 例题:POJ1013 称硬币 ? 解题思路 先假定不平衡中的都是假
币并确定轻重,再逐个扫描查证,最后剩下的是假币。
```cpp
#include<iostream>
using namespace std;
char Left[3][7],Right[3][7],Result[3][7]; //3个2维数组分别存放天平左右和结果
char IsFake(char c ){ //返回称量结果 重就是'H' ,轻就是'L' ,真币返回0;
char r=0;
for(int i=0;i<3;++i){
for(int j=0;j<=3;++j){
if(Result[i][0]=='U'){
if(Left[i][j]==c)r='H'; //出现这种情况先假设这个硬币为重的
if(Right[i][j]==c)r='L';
}
if(Result[i][0]=='D'){
if(Left[i][j]==c)r='L';
if(Right[i][j]==c)r='H';
}
}
}
for(int i=0;i<3;++i)
for(int j=0;j<=3;++j){
if(Result[i][0]=='E'&&(Left[i][j]==c||Right[i][j]==c))r=0;//天平平衡而有该硬币出现,更正结果为0
if(r=='H' && Result[i][0]=='U' && Right[i][j]==c)r=0; //如果假设是重的且天平上翘而该硬币出现在右边,就否定假设,
if(r=='L' && Result[i][0]=='D' && Left[i][j]==c)r=0;
}
return r;
}
int main(){
int t;
cin>>t;
//freopen("d\\cyb.txt","r",stdin);
while(t--){
for(int i=0;i<3;++i)
cin>>Left[i]>>Right[i]>>Result[i];
for(char c='A';c<='L';c++){
char r=IsFake(c);
if(r=='L')cout<<c<<" is the counterfeit coin and it is light.\n";
if(r=='H')cout<<c<<" is the counterfeit coin and it is heavy.\n";
}
}
return 0;
}
野人时代
发布了5 篇原创文章 · 获赞 0 · 访问量 59
私信
关注
内容总结
以上是互联网集市为您收集整理的程序设计与算法笔记之称硬币全部内容,希望文章能够帮你解决程序设计与算法笔记之称硬币所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。