主题:请教:这个简单的循环为何无法进行(6174数学黑洞)????
47
[专家分:590] 发布于 2005-02-02 23:03:00
最近见鬼了,小程序也写不对
[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个回复)
沙发
tong类 [专家分:40] 发布于 2005-02-07 19:06:00
[em8][em8]
我不知道啊
我很想帮你 可我更想有人帮我
谁能给我演示一遍pascal 的画圆图程序
我知道很简单 可是就是不会 谢谢大家
板凳
fankun [专家分:0] 发布于 2006-03-24 18:33:00
main()
{int a[N],i,j,t,sl,si,s,m,n;
m=N;
printf("in put number:");
for(j=0;j<m;j++)
scanf("%d",&a[j]);
for(n=0;n<=10;n++)
{for(i=1;i<m;i++)
for(j=0;j<m-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
sl=a[3]*10*10*10+a[2]*10*10+a[1]*10+a[0];
si=a[0]*10*10*10+a[1]*10*10+a[2]*10+a[3];
s=sl-si;
printf("%d\t",s);
for(j=0;j<m;j++)
{a[j]=s%10;s=s/10;}}
}
本人已经运行没有问题
3 楼
fankun [专家分:0] 发布于 2006-03-24 18:37:00
不过你输入时注意
如果你要输入6541请一个数一个数的输并且用空格隔开或者用逗号也可以
其他数一样
4 楼
lmj9201 [专家分:1400] 发布于 2006-03-24 23:15:00
To楼主
你把
program 6174;
删了,看看行不?
5 楼
chorkey [专家分:0] 发布于 2006-07-12 17:28:00
hey大哥说漏了把
4位数。。4个不相同的数把
况且,有的不用7次,有的超过7次啊
6 楼
zhaoren [专家分:420] 发布于 2006-07-16 08:33:00
楼主问个问题啊:如果这个四位数是1111咋办????
7 楼
游侠UFO [专家分:1200] 发布于 2006-07-19 20:22:00
[quote]
不过你输入时注意
如果你要输入6541请一个数一个数的输并且用空格隔开或者用逗号也可以
其他数一样[/quote]
用不着,直接用字符串输入,需要运算的时候转成整数,运算结束后又转回来.我觉得这样不容易出错
8 楼
fcffc [专家分:50] 发布于 2006-07-20 11:00:00
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; {选择排序}
这是冒泡排序吧
9 楼
游侠UFO [专家分:1200] 发布于 2006-07-20 21:13:00
[quote]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; {选择排序}
这是冒泡排序吧
[/quote]
据我所知这应该是选择,最原始的选择.冒泡应该是(注意差异!):
for i:=1 to (n-1) do
for j:=(i+1) to n do
if a[j]>a[j-1] then swap(a[j],a[j-1]);
10 楼
tl3shi [专家分:110] 发布于 2006-07-22 12:39:00
可以加一个READ 任意输入一个4位数 验证
还可以把每一步过程输出来 这样就更好了!!!
还有 一个4位数 最多7步 绝对能运行到6174
我来回复