我初学c++,所以做得很麻烦,假设有11个球的质量为10,另外一个为11;
则程序清单为:
#include<iostream.h>
#include<stdlib.h>
int i,a[4],b[4],c[4],k,j;
int &first(); //算法:
int &second(); //分三组:A(a1,a2,a3,a4) ;B(b1,b2,b3,b4) ;C(c1,c2,c3,c4)
int main() //K=0: Sum(A)>sum(B)
{ //K=1: Sum(A)<sum(B)
for(i=0;i<4;i++) //K=2: Sum(A)=sum(B)
{ //
a[i]=c[i]=b[i]=10;} //k=0时:1.j=0: 如果 a4+b1+b2+b3>b4+c1+c2+c3 则a4重或b4轻
a[2]=11; // 若:a4+b4>c1+c2=>a4重
k=first(); // 若:a4+b4<c1+c2=>b4轻
j=second(); // 2.j=1: 如果 a4+b1+b2+b3>b4+c1+c2+c3 则b1,b2,b3中有一个为轻
switch(j) // 若:a1+b1>a2+b2 =>b2轻
{ case 0:if(a[3]+b[3]>c[0]+c[1]) // 若:a1+b1<a2+b2 =>b1轻
{cout<<"a4zhong"<<endl;} // 若:a1+b1=a2+b2 =>b3轻
else // 3.j=2: 如果 a4+b1+b2+b3=b4+c1+c2+c3 则a1,a2,a3中有一个为重
{cout<<"b4qing"<<endl;} // 若:a1+b1>a2+b2 =>a1重
break; // 若:a1+b1<a2+b2 =>a2重
// 若:a1+b1=a2+b2 =>a3重
case 1:if(a[0]+b[0]>a[1]+b[1]) //k=1时:1.j=3: 如果 b4+a1+a2+a3>a4+c1+c2+c3 则b4重或a4轻
{ cout<<"b2qing"<<endl;} // 若:a4+b4>a1+a2 =>b4重
else // 若:a4+b4<a1+a2 =>a4轻
if(a[0]+b[0]<a[1]+b[1]) // 2.j=4: 如果 b4+a1+a2+a3>a4+c1+c2+c3 则a1,a2,a3有一个为轻
{cout<<"b1qing"<<endl;} // 若:a1+b1>a2+b2 =>a2轻
else // 若:a1+b1<a2+b2 =>a1轻
{cout<<"b3qing"<<endl;} // 若:a1+b1=a2+b2 =>a3轻
break; // 3.j=5: 如果 b4+a1+a2+a3>a4+c1+c2+c3 则b1,b2,b3有一个为重
// 若:a1+b1>a2+b2 =>b1重
case 2:if(a[0]+b[0]>a[1]+b[1]) // 若:a1+b1<a2+b2 =>b2重
{cout<<"a1重"<<endl;} // 若:a1+b1=a2+b2 =>b3重
else //k=2时:1.j=6: 如果 c1+c2+c3>a1+a2+a3 则c1,c2,c3有一个为重
if(a[0]+b[0]<a[1]+b[1]) // 若:a1+c1>a2+c2 =>c1重
{cout<<"a2zhong"<<endl;} // 若:a1+c1<a2+c2 =>c2重
else // 若:a1+c1=a2+c2 =>c3重
cout<<"a3zhong"<<endl; // 2.j=7: 如果 c1+c2+c3<a1+a2+a3 则c1,c2,c3有一个为轻
break; // 若:a1+c1>a2+c2 =>c2为轻
case 3:if(a[3]+b[3]>a[0]+b[1]) // 若:a1+c1<a2+c2 =>c1为轻
{cout<<"b4zhong"<<endl;} // 若:a1+c1=a2+c2 =>c3为轻
else // 3.j=8: 如果 c1+c2+c3<a1+a2+a3 则c4异常
{cout<<"a4轻"<<endl;}break; // 若:a1+c4>a2+a3 =>c4为重
case 4: // 若:a1+c4<a2+a3 =>c4为轻
if(a[0]+b[0]>a[1]+b[1])
{cout<<"a2qing"<<endl;}
else
if(a[0]+b[0]<a[1]+b[1])
{cout<<"a1qing"<<endl;}
else
{ cout<<"a3qing"<<endl;}
break;
case 5:if(a[0]+b[0]>a[1]+b[1])
{cout<<"b1zhong"<<endl;}
else
if(a[0]+b[0]<a[1]+b[1])
{cout<<"b2zhong"<<endl;}
else
{cout<<"b3zhong"<<endl;}
break;
case 6:if(a[0]+c[0]>a[1]+c[1])
{ cout<<"c1zhong"<<endl;}
else
if(a[0]+c[0]<a[1]+c[1])
{cout<<"c2zhong"<<endl;}
else
cout<<"c3zhong"<<endl;break;
case 7:if(a[0]+c[0]>a[1]+c[1])
{cout<<"c2qing"<<endl;}
else
if(a[0]+c[0]<a[1]+c[1])
{cout<<"c1qing"<<endl;}
else
{cout<<"c2qing"<<endl;}break;
case 8:if(a[0]+c[3]>a[1]+a[2])
{cout<<"c4zhong"<<endl;}
else
{cout<<"c4qing"<<endl;}
break;
}
system("pause");
}
int &first()
{
int sa=0,sb=0;
for(i=0;i<4;i++)
{
sa+=a[i];
sb+=b[i];
}
if(sa>sb)
{k=0;
return k;}
else
if(sa<sb)
{ k=1;
return k;}
else
k=2;
return k;
}
int &second()
{
switch(k)
{
case 0:
if(a[3]+b[0]+b[1]+b[2]>b[3]+c[0]+c[1]+c[2])
{ j=0;
return j;}
else
if(a[3]+b[0]+b[1]+b[2]<b[3]+c[0]+c[1]+c[2])
{ j= 1;
return j;}
else j=2;
break;
case 1:
if(b[3]+a[0]+a[1]+a[2]>a[3]+c[0]+c[1]+c[2])
{j= 3;return j;}
else
if(b[3]+a[0]+a[1]+a[2]<a[3]+c[0]+c[1]+c[2])
{j= 4;return j;}
else
{j= 5;return j;}
break;
case 2:
if(c[0]+c[1]+c[2]>a[0]+a[1]+a[2])
{j= 6;return j;}
else if(c[0]+c[1]+c[2]>a[0]+a[1]+a[2])
{j= 7;return j;}
else {j= 8;return j;}
break;
} }
修改过了,请各位指点指点,最好能简化它,但不知为什么在修改了a[]的值后,运行会有错误
[此贴子已经被作者于2007-11-15 17:27:32编辑过]