1013 Counterfeit Dollar
Posted sweet-ginger-candy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1013 Counterfeit Dollar相关的知识,希望对你有一定的参考价值。
思路:结果"even"者均为正确硬币。则用数组flag[]进行标记,后面再次遇到该枚硬币则自动忽略。
处理错误硬币:我们遇到结果"up"除已判断正确的硬币外,左面硬币flag[]值-1.右面硬币flag值+1.遇到结果"down"因左面差异硬币整体较轻则-1,右面+1
结果处理:abs值最大者为错误硬币。
#include<iostream> #include<string.h> #include<cstdio> #include<cmath> using namespace std; char s1[13],s2[13],con[10]; int flag[12]; int main(){ int n; cin>>n; while(n--){ memset(flag,0,sizeof(flag)); for(int i=1;i<=3;i++){ //scanf_s("%s%s%s",s1,s2,con); cin>>s1>>s2>>con; int len=strlen(s1); if(strcmp(con,"even")==0){ for(int k=0;k<len;k++){ flag[s1[k]-‘A‘]=10; flag[s2[k]-‘A‘]=10; } } else if(strcmp(con,"up")==0){ for(int k=0;k<len;k++){ if(flag[s1[k]-‘A‘]!=10) ++flag[s1[k]-‘A‘]; if(flag[s2[k]-‘A‘]!=10) --flag[s2[k]-‘A‘]; } } else { for(int k=0;k<len;k++){ if(flag[s1[k]-‘A‘]!=10) --flag[s1[k]-‘A‘]; if(flag[s2[k]-‘A‘]!=10) ++flag[s2[k]-‘A‘]; } } } int maxn; maxn=0; int countmax=0; for(int i=0;i<12;i++){ if(flag[i]==10)continue; if(abs(flag[i])>maxn){ maxn=abs(flag[i]); countmax=i; } } if(flag[countmax]>0) printf("%c is the counterfeit coin and it is heavy. ",‘A‘+countmax); else printf("%c is the counterfeit coin and it is light. ",‘A‘+countmax); } return 0; }
以上是关于1013 Counterfeit Dollar的主要内容,如果未能解决你的问题,请参考以下文章