一位商人有一個40磅的砝碼,由於跌落在地而碎成4塊.後來,稱得每塊碎片的重量都是整磅數,而且可以用這4塊來稱從1至40磅之間的任意整數磅的重物.
問這4塊砝碼碎片各重多少?
基本介紹
- 中文名:德·梅齊里亞克的砝碼問題
- 解題者:法國數學家G.B.德·梅齊里亞克
- 解題方法:c語言
- 問題:4塊砝碼碎片各重多少
答案,解題者,C語言解答,
答案
解題者
法國數學家G.B.德·梅齊里亞克(1581一1638)在他的著作中解答了這題. 為使兩砝碼A與B能稱出最多種重量,必須是1磅和3磅,用它們能稱出1、2、3、4磅的重物。如選第三塊砝碼C的重量為2x4+1=9磅,則用它們可稱出1至9+4=13磅間的所有整數磅重物。最後選第四塊砝碼D,使它重量為2x13+1=27磅,那么用這四塊砝碼能稱出從1至27+13=40磅的重物.因此,這四塊砝碼的重量分別為1、3、9、27磅。
C語言解答
#include <stdio.h>
#include <stdlib.h>
int isCorrect(int a,int b,int c,int d,int val)
{
int x1,x2,x3,x4;
int flag;
flag=0;
for(x1=-1;x1<2;x1++)
{
for(x2=-1;x2<2;x2++)
{
for(x3=-1;x3<2;x3++)
{
for(x4=-1;x4<2;x4++)
{
if(val==a*x1+b*x2+c*x3+d*x4)
flag=1;
}
}
}
}
return flag;
}
int main()
{
int a,b,c,d;
int flag=1;
int val;
for(a=1;a<11;a++)
{
for(b=a;b<40;b++)
{
for(c=b;c<40;c++)
{
for(d=c;d<40;d++)
{
if(a+b+c+d==40)
{
flag=1;
for(val=1;val<41&&flag;val++)
{
flag=isCorrect(a,b,c,d,val);
flag=flag*flag;
}
if(flag)
{
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);
}
}
}
}
}
}
return 0;
}