Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
想不出哪儿错了,谁帮忙看看好吗?有注析,c++#include <stdio.h> #include <string> const char con[]={"ABCDEFGHIJKL"}; int flag[12];//用于标志对对应con[]中各个硬币的状态,-1表示没出现,0表示是真币,1表示轻,2表示重 void compare(char s1[],char s2[],char s3[]) { int length; int i; length=strlen(s1); if(strcmp(s3,"even")==0)//当两边相等时,把对应的各个硬币的标志设为0 { for(i=0;i<length;i++) { flag[s1[i]-65]=0; flag[s2[i]-65]=0; } } else if(strcmp(s3,"up")==0)//当为up状态时,表时左边s1重,右边s2轻 { for(i=0;i<length;i++) { if(flag[s1[i]-65]==-1) { flag[s1[i]-65]=2;//2标记出现在重的一边 } if(flag[s1[i]-65]==1)//出现相反情况时,去除 { flag[s1[i]-65]=0; } if(flag[s2[i]-65]==-1) { flag[s2[i]-65]=1;//1标记出现轻的一边 } if(flag[s2[i]-65]==2)//出现相反情况时,去除 { flag[s2[i]-65]=0; } } } else//否则为down状态时,表时左边s1轻,右边s2重 { for(i=0;i<length;i++) { if(flag[s1[i]-65]==-1)//左边标记为轻 { flag[s1[i]-65]=1; } if(flag[s1[i]-65]==2)//出现相反情况时,去除 { flag[s1[i]-65]=0; } if(flag[s2[i]-65]==-1)//右边标记为轻 { flag[s2[i]-65]=2; } if(flag[s2[i]-65]==1)//出现相反情况时,去除 { flag[s2[i]-65]=0; } } } } int main() { int i,m; char s1[7],s2[7],s3[5]; scanf("%d",&m); while(m>0) { m--; for(i=0;i<12;i++) flag[i]=-1;//初始化标记状态 for(i=0;i<3;i++) { scanf("%s%s%s",&s1,&s2,&s3); compare(s1,s2,s3);//开始对比 } for(i=0;i<12;i++) { if(flag[i]==1) printf("%c is the counterfeit coin and it is light.\n",con[i]); if(flag[i]==2) printf("%c is the counterfeit coin and it is heavy.\n",con[i]); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator