12个球,用天平称三次找出唯一一个不同质量的球的方法

在网上看到的一个方法:

分三组,记为A1,A2,A3, A4; B1, B2, B3, B4; C1, C2, C3, C4;

switch( 比较(A1A2A3A4, B1B2B3B4) ) //第一次比较
{
case =:
    swicth( 比较(C1, C2))  //第二次比较
    {
    case >:
        if( C1 > C3) return C1(较重);  //第三次比较
        else if( C1 == C3 ) return C2(较轻);
        // C1 < C3 是不可能滴
        break;
    case <:
        if( C1 < C3) return C1(较轻);  //第三次比较
        else if( C1 == C3 ) return C2(较重);
        // C1 > C3 是不可能滴
        break;
    case =:
        if( C1 == C3) return C4; //第三次比较
        else if( C1 > C3) return C3(较轻);
        else if( C1 < C3) return C3(较重);
        break;

    }
    break;
case >: /* 这种情况说明C1C2C3C4都是正常的 */
    switch( 比较(A1C2C3C4, B1A2A3A4) ) //第二次比较
    {
    case >: /* 说明所求在A1,B1中*/
         if( A1B1 > C1C2 ) return A1(重);    //第三次比较
         else if( A1B1 < C1C2 ) return B1 (轻);
         //A1B1 == C1C2 是不可能滴
         break;
    case <: /* 说明所求在A2,A3,A4 中,且是较重的 */
         if( A3 > A2) return A3(重);           //第三次比较
         else if( A3 < A2) return A2(重);
         else if ( A3 == A2) return A4(重);
         break;
    case =: /* 说明所求在B2,B3,B4 中,且是较轻的*/
         if( B3 > B2) return B2(轻);              //第三次比较
         else if( B3 < B2) return B3(轻);
         else if ( B3 == B2) return B4(轻);
         break;
    }
  
    break;
case <:
    由>的对称性可推知操作,略。    
    break;
}

你可能感兴趣的:(c)