山崎贤人死亡笔记介绍:国际数学会上的题目,谁会?

来源:百度文库 编辑:高考问答 时间:2024/05/07 15:42:22
1993年10月,在山东举行的中、日、美三国数学教育会上,日本的桥本吉颜教授向与会者提出如下一道趣题:
请在下图的□内分别写1、2、……、9各一个数字,使得等式成立
□/(□□)+□/(□□)=□/(□□)
[三个分数的分母是两位数]
并且教授给出一个解答,猜测可能是唯一解.但是用计算机检验,立即找出十个解答.

答案
1 2 6 5 7 8 4 3 9
1 3 2 5 9 6 7 8 4
1 3 2 7 9 6 5 4 8
1 7 8 4 3 9 6 5 2
1 9 6 7 4 8 5 3 2
2 6 8 9 3 4 5 1 7
2 6 8 9 5 1 7 3 4
4 3 9 1 7 8 6 5 2
4 5 6 7 9 8 3 2 1
5 2 6 9 7 8 4 1 3
5 7 8 1 2 6 4 3 9
5 9 6 1 3 2 7 8 4
6 3 4 8 5 1 9 2 7
7 4 8 1 9 6 5 3 2
7 9 6 1 3 2 5 4 8
7 9 8 4 5 6 3 2 1
8 5 1 6 3 4 9 2 7
9 3 4 2 6 8 5 1 7
9 5 1 2 6 8 7 3 4
9 7 8 5 2 6 4 1 3

非常暴力的程序
#include <iostream>
using namespace std;

void fun(int *a)
{
int b[6]={
a[0]+1,
10*(a[1]+1)+a[2]+1,
a[3]+1,
10*(a[4]+1)+a[5]+1,
a[6]+1,
10*(a[7]+1)+a[8]+1
};
if( (b[0]*b[3]+b[1]*b[2])*b[5] == b[1]*b[3]*b[4] ){

for(int i=0;i<9;i++)
cout<<a[i]+1<<" ";
cout<<endl;

}
}

int main()
{
int a[9]={0};
int b[9]={0};
for(a[0]=0;a[0]<9;a[0]++){
b[a[0]]=1;
for(a[1]=0;a[1]<9;a[1]++){
if( b[a[1]]!=0 )continue;
b[a[1]]=1;
for(a[2]=0;a[2]<9;a[2]++){
if( b[a[2]]!=0 )continue;
b[a[2]]=1;
for(a[3]=0;a[3]<9;a[3]++){
if( b[a[3]]!=0 )continue;
b[a[3]]=1;
for(a[4]=0;a[4]<9;a[4]++){
if( b[a[4]]!=0 )continue;
b[a[4]]=1;
for(a[5]=0;a[5]<9;a[5]++){
if( b[a[5]]!=0 )continue;
b[a[5]]=1;
for(a[6]=0;a[6]<9;a[6]++){
if( b[a[6]]!=0 )continue;
b[a[6]]=1;
for(a[7]=0;a[7]<9;a[7]++){
if( b[a[7]]!=0 )continue;
b[a[7]]=1;
for(a[8]=0;a[8]<9;a[8]++){
if( b[a[8]]!=0 )continue;
fun(a);
}
b[a[7]]=0;
}
b[a[6]]=0;
}
b[a[5]]=0;
}
b[a[4]]=0;
}
b[a[3]]=0;
}
b[a[2]]=0;
}
b[a[1]]=0;
}
b[a[0]]=0;
}

getchar();
return 0;
}

1 / 26 + 5 / 78 = 4 / 39
1 / 32 + 7 / 96 = 5 / 48
1 / 78 + 4 / 39 = 6 / 52
1 / 96 + 7 / 48 = 5 / 32
2 / 68 + 9 / 34 = 5 / 17
2 / 68 + 9 / 51 = 7 / 34
4 / 56 + 7 / 98 = 3 / 21
5 / 26 + 9 / 78 = 4 / 13
6 / 34 + 8 / 51 = 9 / 27

整型变量除以整型变量结果还是整型变量.
1 / 26 = 0
5 / 78 = 0
4 / 39 = 0
0 + 0当然 = 0

在计算机面前,9个数字的穷举实在太easy了

一共只有9!=362880种填法,用程序一一验证,几秒就得到结果了。

用计算机暴力猜解很简单啊