回 帖 发 新 帖 刷新版面

主题:纯正的新手...提问,数字黑洞6174

题目描述
数字黑洞6174: 是指一个任意的四位正整数, 将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174,输出掉进黑洞的过程和步数。
输入格式
一个四位整数(不会出现4个相同的数字)
输出格式
若干行算式(如果有的话)
步数
样例输入
4622
样例输出
6422-2246=4176
7641-1467=6174
2

小弟自己试了一下,但评测有一个测试点过不了,求助~~!

奉上我的程序,不足之处请指点
 
 
    var a,c,d,n,i,e:integer; max,min:array[1..4]of integer;
begin
 read(n);
 repeat
 max[1]:=n div 1000;
 max[2]:=(n mod 1000)div 100;
 max[3]:=((n mod 1000)mod 100)div 10;
 max[4]:=(((n mod 1000)mod 100)mod 10);
 for d:=1 to 4 do
  for i:=1 to 4 do
   if max[d]>max[i] then begin
                        a:=max[d];
                        max[d]:=max[i];
                        max[i]:=a;
                     end;
 d:=0;
 for i:=4 downto 1 do
 begin
  inc(d);
  min[d]:=max[i];
 end;
 c:=max[1]*1000+max[2]*100+max[3]*10+max[4];
 d:=min[1]*1000+min[2]*100+min[3]*10+min[4];
 n:=c-d;
 writeln(c,'-',d,'=',n);
 inc(e);
 until n=6174;
 write(e);
end.

回复列表 (共5个回复)

沙发

额。。。
楼主在读入n的时候没判断。
当读入的n=6174时,只需输出0就行了。。。。。。

板凳

谢谢老师的指点~~!第一次在这里发帖,多多指教!!!

3 楼

我觉得吧
用数组读入
反正是4位数
var
a:array[1..4] of integer;
s1,s2,n,t,j,i,b:longint;
sss:string;
begin
readln(sss);
for i:=1 to 4 do val(sss[i],a[i]);
while n<>6174 do
begin 
for i:=1 to 3 do
for j:=i+1 to 4 do
if a[i]<a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
//排序(从大到小还是从小到大随你,我用的是从大到小)
 for i:=1 to 4 do s1:=s1*10+a[i];
for i:=4 downto 1 do s2:=s2*10+a[i];
write(s1,'-',s2);
n:=s1-s2;
writeln('=',n);
b:=b+1;
end;
write(b);
end.
看得懂吧
[fly]加分[/fly]

4 楼

经过修改
var
a:array[1..4] of longint;
s1,s2,n,i,j,t,b:longint;
sss:string;
begin
readln(sss);
while n<>6174 do
begin
for i:=1 to 4 do val(sss[i],a[i]);
for i:=1 to 3 do
for j:=i+1 to 4 do
if a[i]<a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
 for i:=1 to 4 do s1:=s1*10+a[i];
for i:=4 downto 1 do s2:=s2*10+a[i];
n:=s1-s2;
writeln(s1,'-',s2,'=',n);
b:=b+1; s1:=0;s2:=0; str(n,sss);
end;
write(b);
end.
对了

5 楼

嗯,可以。
此题可比vijos的6174题简单多了! 呵呵!

我来回复

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