词条 | 德·梅齐里亚克的砝码问题 |
释义 | 问题一位商人有一个40磅的砝码,由于跌落在地而碎成4块.后来,称得每块碎片的重量都是整磅数,而且可以用这4块来称从1至40磅之间的任意整数磅的重物. 问这4块砝码碎片各重多少? 答案解题者法国数学家G.B.德·梅齐里亚克(1581一1638)在他的著作中解答了这题. 为使两祛码A与B能称出最多种重量,必须是1磅和3磅,用它们能称出l、2、3、4磅的重物。如选第三块祛码C的重量为2x4+1二9磅,则用它们可称出l至C+4“9十4二”磅间的所有牲数磅重物。最后选第四块祛码D,使它重量为2又13十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; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。