大致题意:
有一打(12枚)硬币,其中有且仅有1枚假币,11枚真币
用A~L作为各个硬币的代号
假币可能比真币略轻,也可能略重
现在利用天枰,根据Input输入的3次称量,找出假币,并输出假币是轻还是重。
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> int Abs(int a) { return a>0?a:(-a); } int vis[15]; int main() { int i,j,T,k;int ans; char str1[10],str2[10],str3[10]; scanf("%d",&T); getchar(); while(T--) { ans=0; for(i=1;i<=12;i++) { vis[i]=10; } for(k=1;k<=3;k++) { //getchar(); memset(str1,0,sizeof(str1)); memset(str2,0,sizeof(str2)); memset(str3,0,sizeof(str3)); scanf("%s %s %s",str1,str2,str3); if(strcmp(str3,"even")==0) { for(i=0;str1[i]!='\0';i++) vis[str1[i]-'A'+1]=0; for(i=0;str2[i]!='\0';i++) vis[str2[i]-'A'+1]=0; } else if(strcmp(str3,"up")==0) { for(i=0;str1[i]!='\0';i++) if(vis[str1[i]-'A'+1]!=0) vis[str1[i]-'A'+1]++;//左边重假币 for(i=0;str2[i]!='\0';i++) if(vis[str2[i]-'A'+1]!=0) vis[str2[i]-'A'+1]--;//右边轻假币 } else { for(i=0;str1[i]!='\0';i++) if(vis[str1[i]-'A'+1]!=0) vis[str1[i]-'A'+1]--;//左边轻假币 for(i=0;str2[i]!='\0';i++) if(vis[str2[i]-'A'+1]!=0) vis[str2[i]-'A'+1]++;//右边重假币 } ans=0; for(i=1;i<=12;i++) { if(Abs(vis[i]-10)>Abs(ans)&&vis[i]!=0) { ans=vis[i]-10; j=i; // printf("%d\n",j); } } } if(ans>0) printf("%c is the counterfeit coin and it is heavy.\n",j+64); else printf("%c is the counterfeit coin and it is light.\n",j+64); } system("pause"); return 0; }