POJ 1013 Counterfeit Dollar
2010-12-22 22:59
316 查看
如果称量结果为even,则每个硬币都是真的,否则,如果结果为up,将左右两边的硬币对换
对于结果不是even的称量,统计各个硬币在两边出现的次数,由于只有一个假的,则假硬币出现的次数必等于结果不是even的次数
最后遍历一边所有硬币,如果不能确定为真且某一边出现的次数等于结果不是even的次数,则它就是假的,同时,可以判断是轻的还是重的,因为数据保证3次称量必定可以找出来
代码:
对于结果不是even的称量,统计各个硬币在两边出现的次数,由于只有一个假的,则假硬币出现的次数必等于结果不是even的次数
最后遍历一边所有硬币,如果不能确定为真且某一边出现的次数等于结果不是even的次数,则它就是假的,同时,可以判断是轻的还是重的,因为数据保证3次称量必定可以找出来
代码:
#include<iostream> using namespace std; int True[13],lnum[13],rnum[13]; char s[10][20]; int main() { int i,j,ca,k,flag,cnt,ans; char res[10],t; cin>>ca; while(ca--) { cnt=3; memset(True,0,sizeof(True)); memset(lnum,0,sizeof(lnum)); memset(rnum,0,sizeof(rnum)); for(i=1;i<=9;i++) { scanf("%s",&s[i]); if(i%3==0) { if(s[i][0]=='e') { cnt--; for(j=0;j<strlen(s[i-1]);j++) True[s[i-1][j]-'A'+1]=1; for(j=0;j<strlen(s[i-2]);j++) True[s[i-2][j]-'A'+1]=1; } else if(s[i][0]=='u') { for(j=0;j<strlen(s[i-1]);j++) { t=s[i-1][j]; s[i-1][j]=s[i-2][j]; s[i-2][j]=t; } } } } for(i=3;i<=9;i+=3) { if(s[i][0]!='e') { for(j=0;j<strlen(s[i-1]);j++) { lnum[s[i-2][j]-'A'+1]++; } for(j=0;j<strlen(s[i-1]);j++) { rnum[s[i-1][j]-'A'+1]++; } } } for(i=1;i<=12;i++) { if(!True[i]) { if(lnum[i]==cnt) { strcpy(res,"light"); ans=i; break; } else if(rnum[i]==cnt) { strcpy(res,"heavy"); ans=i; break; } } } printf("%c is the counterfeit coin and it is %s./n",ans+'A'-1,res); } return 0; }
相关文章推荐
- POJ 1013-Counterfeit Dollar
- POJ 1013 Counterfeit Dollar
- POJ_1013_Counterfeit Dollar
- POJ 1013 模拟题硬币称量
- poj 1013(uva 608) Counterfeit Dollar
- POJ1013称硬币
- POJ 1013 Counterfeit Dollar
- POJ 1013 Counterfeit Dollar
- POJ 1013 Counterfeit Dollar
- poj 1013(找出假币)
- POJ 1013 Counterfeit Dollar
- poj 1013 && poj 1029【寻找硬币】
- POJ 1013
- poj 1013——用运算模拟变换操作
- POJ-1013-Counterfeit Dollar -暴力水题
- poj-1013 Counterfeit Dollar
- POJ 1013 Counterfeit Dollar 找假硬币 模拟
- POJ 1013 题解
- Poj 1013 Counterfeit Dollar / OpenJudge 1013(2692) 假币问题
- POJ 1013: Counterfeit Dollar