通用版1.S - Counterfeit Dollar

xiaoxiao2021-02-28  69

#include <stdio.h> #include <string.h> #include <math.h> int main()//这个题一直以为是固定放四个,结果一直WA,唉 { int s[15],f[15],i,j,t; char x[4][10],y[4][10],z[4][10]; scanf("%d",&t); while(t--){ memset(s,0,sizeof(s)); memset(f,0,sizeof(f)); for(i=0;i<=2;i++){ scanf("%s%s%s",x[i],y[i],z[i]); if(strcmp(z[i],"even")==0){ for(j=0;j<=strlen(x[i])-1;j++){ s[x[i][j]-'A']=1; s[y[i][j]-'A']=1; } } } for(i=0;i<=2;i++){ if(strcmp(z[i],"up")==0){ for(j=0;j<=strlen(x[i])-1;j++){ if(s[x[i][j]-'A']==0)f[x[i][j]-'A']++; if(s[y[i][j]-'A']==0)f[y[i][j]-'A']--; } }else if(strcmp(z[i],"down")==0) { for(j=0;j<=strlen(x[i])-1;j++){ if(s[x[i][j]-'A']==0)f[x[i][j]-'A']--; if(s[y[i][j]-'A']==0)f[y[i][j]-'A']++; } } } char ans; int max=0,u; for(i=0;i<=11;i++){ // if(f[i]<0)f[i]=-1*f[i]; if(abs(f[i])>max){ u=f[i]; max=abs(f[i]); ans=i+'A'; } //printf("%d,%c\n",f[i],ans); } //printf("%d\n",max); if(u<0)printf("%c is the counterfeit coin and it is light.\n",ans); else printf("%c is the counterfeit coin and it is heavy.\n",ans); } return 0; }

这道题是看了别人的题解思路才会的quq,如果天平两边平等,则两边的所有硬币都是真的,要记录下来,如果不平等,重的那一边的所有硬币都被当做重假币,轻的一边当做轻假币,用一个数组记录他们的状态,最终找出最重的或最轻的

原理就是如果是真币,那么若在某一个天平上被怀疑为轻假币,在另一个天平上如果再次出现则可能会被怀疑为重假币抵消

转载请注明原文地址: https://www.6miu.com/read-2627879.html

最新回复(0)