poj1013
Posted kasenbob
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1013相关的知识,希望对你有一定的参考价值。
1.链接地址
https://vjudge.net/problem/POJ-1013#author=linjiale
2.问题描述
思远宝宝有一打银币( 一打有几个你知道么)。然而,其中有一个是伪造的(不知道是偏重还是偏轻),现在思远有三次机会进行天平称重,并且保证三次后有解,请你找出伪造银币并告诉我是偏重还是偏轻。
输入样例
1 EFGH ABCD even EFGI ABCI even ABEF CDFK up
输出样例
K is the counterfeit coin and it is light.
3.解题思路
如果是平衡 那么比较中的硬币都是真的
如果不平衡,那么所有的硬币都可能要怀疑 如果重那么+1 如果轻-1 , 最后统计怀疑的程度。
4.算法实现源代码
#include<stdio.h> #include<math.h> #include<memory.h> int main() int t,i,j,k,max; char ans; scanf("%d",&t); for(i=0;i<t;i++) char l[3][6],r[3][6],w[3][6]; int time[‘L‘+1],flag[‘L‘+1]; memset(time,0,sizeof(time)); memset(flag,0,sizeof(flag)); for(j=0;j<3;j++) scanf("%s %s %s",l[j],r[j],w[j]); for(j=0;j<3;j++) switch(w[j][0]) case ‘u‘: for(k=0;l[j][k];k++) time[ l[j][k] ]++; time[ r[j][k] ]--; break; case ‘d‘: for(k=0;l[j][k];k++) time[ l[j][k] ]--; time[ r[j][k] ]++; break; case ‘e‘: for(k=0;l[j][k];k++) flag[ l[j][k] ]=1; flag[ r[j][k] ]=1; break; max=0; for(j=‘A‘;j<=‘L‘;j++) if(flag[j]) continue; else if(max<=abs(time[j])) max=abs(time[j]); ans=j; if(time[ans]>0) printf("%c is the counterfeit coin and it is heavy.\n",ans); else printf("%c is the counterfeit coin and it is light.\n",ans); return 0;
以上是关于poj1013的主要内容,如果未能解决你的问题,请参考以下文章