主题:请教:这个简单的循环为何无法进行(6174数学黑洞)????
最近见鬼了,小程序也写不对
[em10][em10][em10][em10][em10]
问题描述:一个任意四位数,把四个数字分别组成一个最大的数和一个最小的数,作差,得新的四位数,重复此过程,7次内必得6174.
要求:验证此命题
我的源代码:
program 6174;
var
i,j,result,k,realtemp,max,min,number:integer;
temp:array [1..4] of integer;
begin
number:=1000;
while number<=9999 do
begin
k:=0;
temp[1]:=number div 1000;
temp[2]:=number div 100 mod 10;
temp[3]:=number mod 100 div 10;
temp[4]:=number mod 10;
repeat
for i:=1 to 3 do
for j:=i+1 to 4 do if temp[j]>temp[i] then
begin
realtemp:=temp[i];
temp[i]:=temp[j];
temp[j]:=realtemp;
end; {选择排序}
max:=1000*temp[1]+100*temp[2]+10*temp[3]+temp[4];
min:=1000*temp[4]+100*temp[3]+10*temp[2]+temp[1];
result:=max-min;
temp[1]:=result div 1000;
temp[2]:=result div 100 mod 10;
temp[3]:=result mod 100 div 10;
temp[4]:=result mod 10; {拆数}
k:=k+1;
until result=6174;
writeln(number,' ',k);
number:=number+1;
end;
end.
大家到机子上试一下,运行到1110就不动了,我也曾把while..do换成4个从1 到10 的for ..do ,也不行.
大家帮帮忙,顺便到我新建的群来!!! writeln( '9035669');
[em12]
[em10][em10][em10][em10][em10]
问题描述:一个任意四位数,把四个数字分别组成一个最大的数和一个最小的数,作差,得新的四位数,重复此过程,7次内必得6174.
要求:验证此命题
我的源代码:
program 6174;
var
i,j,result,k,realtemp,max,min,number:integer;
temp:array [1..4] of integer;
begin
number:=1000;
while number<=9999 do
begin
k:=0;
temp[1]:=number div 1000;
temp[2]:=number div 100 mod 10;
temp[3]:=number mod 100 div 10;
temp[4]:=number mod 10;
repeat
for i:=1 to 3 do
for j:=i+1 to 4 do if temp[j]>temp[i] then
begin
realtemp:=temp[i];
temp[i]:=temp[j];
temp[j]:=realtemp;
end; {选择排序}
max:=1000*temp[1]+100*temp[2]+10*temp[3]+temp[4];
min:=1000*temp[4]+100*temp[3]+10*temp[2]+temp[1];
result:=max-min;
temp[1]:=result div 1000;
temp[2]:=result div 100 mod 10;
temp[3]:=result mod 100 div 10;
temp[4]:=result mod 10; {拆数}
k:=k+1;
until result=6174;
writeln(number,' ',k);
number:=number+1;
end;
end.
大家到机子上试一下,运行到1110就不动了,我也曾把while..do换成4个从1 到10 的for ..do ,也不行.
大家帮帮忙,顺便到我新建的群来!!! writeln( '9035669');
[em12]