数学黑洞6174讲解
3个回答
展开全部
或许你早就听过这个故事:有一个神秘的数学黑洞,叫做「6174」。只要你任选4个不完全相同的数字(像1111就不行),让「最大排列」减「最小排列」(例如4321-1234),不断重复这个动作,最后一定会得到相同的结果:6174。
之所以说「6174」是「数学黑洞」,是因为无论你怎么换那4个数字,只要不是完全重复,最后都逃脱不了「6174」的魔掌。而这个「最大减最小」的动作,最多不会超过7次!这又加深了「6174」的神秘性。若以6321为例:
6321-1236=5085 一次
8550-0558=7992 二次
9972-2799=7173 三次
7731-1377=6354 四次
6543-3456=3087 五次
8730-0378=8352 六次
8532-2358=6174 七次
为什么不继续下去了呢?因为7641-1467又会等于6174,会无限循环(若相减结果低于1000,则千位数补0继续算)。至于为什么会这样?简单的说,由n个数所组成的数字有限,连续做「最大减最小」变换(或称卡普耶卡变换,Kaprekar)最后势必形成回圈。而这个数字「6174」也被称为「卡普耶卡常数」(或翻卡布列克常数)。
任取一个四位数,只要四个数字不全相同,按数字递减顺序排列,构成最大数作为被减数;按数字递增顺序排列,构成最小数作为减数,其差就会得6174;如不是6174,则按上述方法再作减法,至多不过7步就必然得到6174.
如取四位数5462,按以上方法作运算如下:
6542-2456=4086 8640-0468=8172
8721-1278=7443 7443-3447=3996
9963-3699=6264 6642-2466=4176
7641-1467=6174
那么,出现6174的结果究竟有什么科学依据呢?
设M是一个四位数而且四个数字不全相同,把M的数字按递减的次序排列,
记作M(减);
然后再把M中的数字按递增次序排列,记作M增,记差M(减)-M(增)=D1,从M到D1是经过上述步骤得来的,我们把它看作一种变换,从M变换到D1记作:T(M)= D1把D1视作M一样,按上述法则做减法得到D2 ,也可看作是一种变换,把D1变换成D2,
记作:T(D1)= D2
同样D2可以变换为D3;D3变换为D4……,既T(D2)= D3, T(D3)= D4……
现在我们要证明,至多是重复7次变换就得D7=6174.
证:四位数总共有104=10000个,其中除去四个数字全相同的,余下104-10=9990个数字不全相同.我们首先证明,变换T把这9990个数只变换成54个不同的四位数.
设a、b、c、d是M的数字,并令:
a≥b≥c≥d
因为它们不全相等,上式中的等号不能同时成立.我们计算T(M)
M(减)=1000a+100b+10c+d
M(增)=1000d+100c+10b+a
T(M)= D1= M(减)-M(增)=1000(a-d)+100(b-c)+10(c-b)+d-a=999(a-d)+90(b-c)
我们注意到T(M)仅依赖于(a-d)与(b-c),因为数字a,b,c,d不全相等,因此由a≥b≥c≥d可推出;a-d>0而b-c≥0.
此外b、c在a与d之间,所以a-d≥b-c,这就意味着a-d可以取1,2,…,9九个值,并且如果它取这个集合的某个值n,b-c只能取小于n的值,至多取n.
例如,若a-d=1,则b-c只能在0与1中选到,在这种情况下,T(M)只能取值:
999×(1)+90×(0)=0999
999×(1)+90×(1)=1089
类似地,若a-d=2, T(M)只能取对应于b-c=0,1,2的三个值.把a-d=1,a-d=2,…,a-d=9的情况下b-c所可能取值的个数加起来,我们就得到2+3+4+…+10=54
这就是T(M)所可能取的值的个数.在54个可能值中,又有一部分是数码相同仅仅是数位不同的值,这些数值再变换T(M)中都对应相同的值(数学上称这两个数等价),剔除等价的因数,在T(M)的54个可能值中,只有30个是不等价的,它们是:
9990,9981,9972,9963,9954,9810,9711,9621,9531,9441,8820,8730,8721,8640,8622,8550,
8532,8442,7731,7641,7632,7551,7533,7443,6642,6552,6543,5553,5544.
对于这30个数逐个地用上述法则把它换成最大与最小数的差,至多6步就出现6174这个数.证毕.
之所以说「6174」是「数学黑洞」,是因为无论你怎么换那4个数字,只要不是完全重复,最后都逃脱不了「6174」的魔掌。而这个「最大减最小」的动作,最多不会超过7次!这又加深了「6174」的神秘性。若以6321为例:
6321-1236=5085 一次
8550-0558=7992 二次
9972-2799=7173 三次
7731-1377=6354 四次
6543-3456=3087 五次
8730-0378=8352 六次
8532-2358=6174 七次
为什么不继续下去了呢?因为7641-1467又会等于6174,会无限循环(若相减结果低于1000,则千位数补0继续算)。至于为什么会这样?简单的说,由n个数所组成的数字有限,连续做「最大减最小」变换(或称卡普耶卡变换,Kaprekar)最后势必形成回圈。而这个数字「6174」也被称为「卡普耶卡常数」(或翻卡布列克常数)。
任取一个四位数,只要四个数字不全相同,按数字递减顺序排列,构成最大数作为被减数;按数字递增顺序排列,构成最小数作为减数,其差就会得6174;如不是6174,则按上述方法再作减法,至多不过7步就必然得到6174.
如取四位数5462,按以上方法作运算如下:
6542-2456=4086 8640-0468=8172
8721-1278=7443 7443-3447=3996
9963-3699=6264 6642-2466=4176
7641-1467=6174
那么,出现6174的结果究竟有什么科学依据呢?
设M是一个四位数而且四个数字不全相同,把M的数字按递减的次序排列,
记作M(减);
然后再把M中的数字按递增次序排列,记作M增,记差M(减)-M(增)=D1,从M到D1是经过上述步骤得来的,我们把它看作一种变换,从M变换到D1记作:T(M)= D1把D1视作M一样,按上述法则做减法得到D2 ,也可看作是一种变换,把D1变换成D2,
记作:T(D1)= D2
同样D2可以变换为D3;D3变换为D4……,既T(D2)= D3, T(D3)= D4……
现在我们要证明,至多是重复7次变换就得D7=6174.
证:四位数总共有104=10000个,其中除去四个数字全相同的,余下104-10=9990个数字不全相同.我们首先证明,变换T把这9990个数只变换成54个不同的四位数.
设a、b、c、d是M的数字,并令:
a≥b≥c≥d
因为它们不全相等,上式中的等号不能同时成立.我们计算T(M)
M(减)=1000a+100b+10c+d
M(增)=1000d+100c+10b+a
T(M)= D1= M(减)-M(增)=1000(a-d)+100(b-c)+10(c-b)+d-a=999(a-d)+90(b-c)
我们注意到T(M)仅依赖于(a-d)与(b-c),因为数字a,b,c,d不全相等,因此由a≥b≥c≥d可推出;a-d>0而b-c≥0.
此外b、c在a与d之间,所以a-d≥b-c,这就意味着a-d可以取1,2,…,9九个值,并且如果它取这个集合的某个值n,b-c只能取小于n的值,至多取n.
例如,若a-d=1,则b-c只能在0与1中选到,在这种情况下,T(M)只能取值:
999×(1)+90×(0)=0999
999×(1)+90×(1)=1089
类似地,若a-d=2, T(M)只能取对应于b-c=0,1,2的三个值.把a-d=1,a-d=2,…,a-d=9的情况下b-c所可能取值的个数加起来,我们就得到2+3+4+…+10=54
这就是T(M)所可能取的值的个数.在54个可能值中,又有一部分是数码相同仅仅是数位不同的值,这些数值再变换T(M)中都对应相同的值(数学上称这两个数等价),剔除等价的因数,在T(M)的54个可能值中,只有30个是不等价的,它们是:
9990,9981,9972,9963,9954,9810,9711,9621,9531,9441,8820,8730,8721,8640,8622,8550,
8532,8442,7731,7641,7632,7551,7533,7443,6642,6552,6543,5553,5544.
对于这30个数逐个地用上述法则把它换成最大与最小数的差,至多6步就出现6174这个数.证毕.
展开全部
program p1;
var
a:array[1..4] of integer;{读入一个数组,如4 5 6 7}
i,j,x,y:integer;
begin
for i:=1 to 4 do
readln(a[i]);
y:=0;
while (a[1]<>6)and(a[2]<>1)and(a[3]<>7)and(a[4]<>4) do
begin
for i:=1 to 3 do
begin
if a[i]<a[i+1] then
j:=a[i];a[i]:=a[i+1];a[i+1}:=j;
end;
x:=(1000*a[1]+100*a[2]+10*a[3]+a[4])-(1000*a[4]+100*a[3]+10*a[2]+a[1]);
while x<>0 do
begin
for i:=1 to 4 do
a[i]:=x mod 10;
x:=x div 10;
end;
y:=y+1;
end;
writeln(y)
end.
var
a:array[1..4] of integer;{读入一个数组,如4 5 6 7}
i,j,x,y:integer;
begin
for i:=1 to 4 do
readln(a[i]);
y:=0;
while (a[1]<>6)and(a[2]<>1)and(a[3]<>7)and(a[4]<>4) do
begin
for i:=1 to 3 do
begin
if a[i]<a[i+1] then
j:=a[i];a[i]:=a[i+1];a[i+1}:=j;
end;
x:=(1000*a[1]+100*a[2]+10*a[3]+a[4])-(1000*a[4]+100*a[3]+10*a[2]+a[1]);
while x<>0 do
begin
for i:=1 to 4 do
a[i]:=x mod 10;
x:=x div 10;
end;
y:=y+1;
end;
writeln(y)
end.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询