德·梅齊里亞克的砝碼問題

一位商人有一個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;
}

相關詞條

熱門詞條

聯絡我們