设有12个小球。其中11个小球的重量相同,称为好球;有一个小球的重量与11个好球的重量不同(或轻或重),称这个小球为坏球。试编写一个算法,用一个无砝码的天平称三次找出这个坏球,并确定其比好球轻还是重。
代码:
#include<iostream>
using namespace std;
int a12(int a[])
{if(a[1]+a[2]+a[3]+a[4]==a[5]+a[6]+a[7]+a[8]){if(a[1]+a[9]==a[10]+a[11]){if(a[1]>a[12]) return(-12);elsereturn(12);}else if(a[1]+a[9]>a[10]+a[11]){if(a[10]==a[11]) return(9);else if(a[10]==a[11]) return(9);else if(a[10]>a[11]) return (-11);elsereturn(-10);}else{if(a[10]==a[11]) return(-9);else if(a[10]>a[11]) return(10);else return(11);}}else if(a[1]+a[2]+a[3]+a[4]>a[5]+a[6]+a[7]+a[8]){if(a[1]+a[2]+a[6]==a[3]+a[4]+a[5])if(a[1]==a[7]) return(-8);elsereturn(-7);else if(a[1]+a[2]+a[6]>a[3]+a[4]+a[5]){if(a[1]==a[2]) return(-5);elseif(a[1]>a[2]) return(1);elsereturn(2);}else{if(a[3]==a[4]) return(-6);else if(a[3]>a[4]) return(3);else return(4);}}else{if(a[1]+a[2]+a[6]==a[3]+a[4]+a[5])if(a[1]==a[7]) return(8);elsereturn(7);else if(a[1]+a[2]+a[6]>a[3]+a[4]+a[5]){if(a[3]==a[4]) return(6);elseif(a[3]>a[4]) return(-4);elsereturn(-3);}else{if(a[1]==a[2]) return(5);else if(a[1]>a[2]) return(-2);else return(-1);}}
}
int main()
{int a[13]={0,5,5,5,5,5,5,5,4,5,5,5,5};cout<<"k="<<a12(a)<<endl;return 0;
}
运行
表示第八个小球轻