平成11年2月22日
☆☆「流れ星」☆☆
第10回
数学的な応募問題<解答募集期間:2月22日〜3月8日>
[バレンタインデーの贈り物]
包装紙をはずしてみると、正方形の箱が出てきました。
振ってみてもカタカタ音がしません。太郎さんは嬉しそうに、ふたを
開けてみると、1辺が10cmの正三角形のチョコレートが現れました。
そこで、太郎さんは正三角形のチョコレートが正方形の箱にカタカタ
音がしないように一体何センチの正方形だったか知りたくなりました。
また、どのように入っていたかも教えてください。
ーの数学オリンピック出ていたのを改題しました。>
メールで送ってください。待っています。
<学校>
mizuno@kaizukita-hs.hirata.gifu.jp<自宅>
mizuryu@aqua.ocn.ne.jp<浜田 明巳>さんの解答(3月1日)
第10回数学的な応募問題解答
C言語のプログラムを作成し求めました.内容は次の通りです.
1辺の長さが1の正方形ABCDを考える.ABの中点をMとする.この正方形に内接する正三角形を△EFGとし,EをAM上,FをBC上にあるとする.GはADまたはDC上にあることになる.
BCをx軸,ABをy軸とし,A(0,1),B(0,0),C(1,0),D(1,1)とする.E,Fを適当に動かし,正三角形であることからGの位置を求め,GがADまたはDC上にあり,EFの長さが最大になるときを求める.そのときのEFの長さを10pに換算したときのABの長さが求める答である.
このプログラムにより,EがAに一致し,GがCD上にあり,BF=DG=2−√3(AB=1のとき)のときに最大値AE=√6−√2をとることが分かる.故に答は5(√2+√6)/2pである.
プログラムでは近似計算の為9.65932pとなる.これは小数第4位まで正しい.
サレジオ学院高等学校 浜田 明巳
/*valentin.c*/
#include<stdio.h>
#include<math.h>
void main(){
double kizami[4],gosa[4],EF,EF_max,AE,AE_max,AE_hani1[4],AE_hani2[4],BF,BF_max,BF_hani1[4],BF_hani2[4],xG,yG;
int j;
kizami[0]=.001;
for(j=1;j<=2;j++){
kizami[j]=kizami[j-1]*.1;
}
for(j=0;j<=2;j++){
gosa[j]=kizami[j];
}
AE_hani1[0]=0;
AE_hani2[0]=.5;
BF_hani1[0]=0;
BF_hani2[0]=1;
for(j=0;j<=2;j++){
EF_max=0;
printf("%7.5lfきざみ,%7.5lf≦AE≦%7.5lf,%7.5lf≦BF≦%7.5lfで計算中\n",kizami[j],AE_hani1[j],AE_hani2[j],BF_hani1[j],BF_hani2[j]);
for(AE=AE_hani1[j];AE<=AE_hani2[j];AE+=kizami[j]){
for(BF=BF_hani1[j];BF<=BF_hani2[j];BF+=kizami[j]){
xG=(-sqrt(3)*AE+BF+sqrt(3))*.5;
yG=(-AE+sqrt(3)*BF+1)*.5;
if((fabs(xG-.5)<=.5&&fabs(yG-1)<gosa[j])||(fabs(xG-1)<gosa[j]&&fabs(yG-.5)<=.5)){
EF=sqrt((1-AE)*(1-AE)+BF*BF);
if(EF_max<EF){
EF_max=EF;
AE_max=AE;
BF_max=BF;
printf("XG=%7.5lf YG=%7.5lf EF=%7.5lf AE=%7.5lf BF=%7.5lf\n",xG,yG,EF,AE,BF);
}
}
}
}
if(j<2){
AE_hani1[j+1]=AE_max-kizami[j];
if(AE_hani1[j+1]<AE_hani1[0]){
AE_hani1[j+1]=AE_hani1[0];
}
AE_hani2[j+1]=AE_max+kizami[j];
if(AE_hani2[j+1]>AE_hani2[0]){
AE_hani2[j+1]=AE_hani2[0];
}
BF_hani1[j+1]=BF_max-kizami[j];
if(BF_hani1[j+1]<BF_hani1[0]){
BF_hani1[j+1]=BF_hani1[0];
}
BF_hani2[j+1]=BF_max+kizami[j];
if(BF_hani2[j+1]>BF_hani2[0]){
BF_hani2[j+1]=BF_hani2[0];
}
}
}
printf("\n");
printf("答=%8.5lfcm\n",10/EF_max);
}