题目:法国数学家梅齐亚克在他著名的《数字组合游戏》(1962)中提出了一个问题:一位商人有一个重40磅的砝码,一天不小心将砝码摔成了四块。后来商人称得每块的重量都是整磅数,而且发现这四块碎片可以在天平上称1至40磅之间的任意重量。请问这四块碎片各重多少?
//编程百例74
/*题目:法国数学家梅齐亚克在他著名的《数字组合游戏》
(1962)中提出了一个问题:一位商人有一个重40磅
的砝码,一天不小心将砝码摔成了四块。后来商人
称得每块的重量都是整磅数,而且发现这四块碎片
可以在天平上称1至40磅之间的任意重量。请问这
四块碎片各重多少?
*/
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int A,B,C,D;//4个砝码在这个[1,40]范围内
int m,n,p,q;//可能出现的参数{-1,0,1}
for(A=1;A<=40;++A)
for(B=A+1;B<=40;++B)
for(C=B+1;C<=40;++C)
for(D=C+1;D<=40;++D)
if(A+B+C+D==40)
{
int num = 1;
bool bHa = false;
for(;num<=40;++num)
{
for(m=-1;m<=1&&!bHa;++m)
for(n=-1;n<=1&&!bHa;++n)
for(p=-1;p<=1&&!bHa;++p)
for(q=-1;q<=1&&!bHa;++q)
if(m*A+n*B+p*C+q*D==num)
{
bHa = true;
}
if (!bHa)
{
break;
}
bHa = false;
}//end for num
if (num == 41)
{
cout<<"the size is "<<A<<" "<<B<<" "<<C<<" "<<D<<endl;
}
}//end if(A+...==40)
return 0;
}