回 帖 发 新 帖 刷新版面

主题:请教:这个简单的循环为何无法进行(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]

回复列表 (共13个回复)

11 楼

[quote][quote]for&nbsp;i:=1&nbsp;to&nbsp;3&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;j:=i+1&nbsp;to&nbsp;4&nbsp;do&nbsp;if&nbsp;temp[j]>temp[i]&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realtemp:=temp[i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[i]:=temp[j];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[j]:=realtemp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{选择排序}

这是冒泡排序吧
[/quote]

据我所知这应该是选择,最原始的选择.冒泡应该是(注意差异!):
for&nbsp;i:=1&nbsp;to&nbsp;(n-1)&nbsp;do
&nbsp;&nbsp;for&nbsp;j:=(i+1)&nbsp;to&nbsp;n&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;a[j]>a[j-1]&nbsp;then&nbsp;swap(a[j],a[j-1]);[/quote]

  你说的和上面的有什么不同  N在上面=4   N-1=3  
      SWAP就是交换函数

12 楼

这个程序只到1110的原因是 
你运行到1111时 四个数组成的最大数和最小数都为1111 
作差后为0000  然后得出的四个数组成的最大数和最小数都为0000
作差后又为0000   陷入循环``````````````

13 楼

http://hi.baidu.com/fankundedf希望大家多到这里来我是在这里发表过的就2楼的fankuna  啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册