这是我同学的思路,比我的好多了。。。

一次判断各球的重量,如假设轻,若在重的一边或平衡端出现则假设错

Source Code

Problem: 
1013   User: lnmm 
Memory: 64K  Time: 0MS 
Language: C
++   Result: Accepted 

Source Code 
#include
" stdio.h "
#include
" string.h "
char  left[ 3 ][ 7 ],right[ 3 ][ 7 ],result[ 3 ][ 5 ];

bool  isHeavy( char  x )
{
    
int i;
    
for(i=0;i<3;i++)
    
{
        
switch(result[i][0])
        
{
        
case 'u':if(strchr(left[i],x)==NULL)return false;break;
        
case 'e':if(strchr(left[i],x)!=NULL||strchr(right[i],x)!=NULL)return false;break;
        
case 'd':if(strchr(right[i],x)==NULL)return false;break;
        }

    }

    
return true;
}


bool  isLight( char  x )
{
    
int i;
    
for(i=0;i<3;i++)
    
{
        
switch(result[i][0])
        
{
        
case 'u':if(strchr(right[i],x)==NULL)return false;break;
        
case 'e':if(strchr(left[i],x)!=NULL||strchr(right[i],x)!=NULL)return false;break;
        
case 'd':if(strchr(left[i],x)==NULL)return false;break;
        }

    }

    
return true;
}


void  main()
{
    
int n;
    
char c;
    
int i;
    scanf(
"%d",&n);
    
while(n>0)
    
{
        
for( i=0;i<3;i++)
            scanf(
"%s%s%s",left[i],right[i],result[i]);
        
for(c='A';c<='L';c++)
        
{
            
if(isLight(c))
            
{
                printf(
"%c is the counterfeit coin and it is light.\n",c);
                
break;
            }

            
if(isHeavy(c))
            
{
                printf(
"%c is the counterfeit coin and it is heavy.\n",c);
                
break;
            }


        }

        n
--;

    }

}