各位大侠,帮忙看看哪错了(pascal)(数学黑洞6174 已知:一个任意的四位正整数。将数字重新组合成一个最
vara:array[1..4]ofinteger;max4,max3,max2,max1,m,i,j,k:integer;flag:boolean;cha:longin...
var
a :array[1..4]of integer;
max4,max3,max2,max1,m,i,j,k:integer;
flag:boolean;
cha:longint;
begin
read(a[1],a[2],a[3],a[4]);
flag:=true;
m:=0;
while cha <>6174 do
begin
m:=m+1;
for i:=1 to 4 do
begin
max4:=a[i];
if a[i]>max4
then
begin
max4:=a[i];
flag:=false;
end;
end;
if flag
then
begin
for j:=1 to 3 do
begin
max3:=a[j];
if a[j]>max3
then
begin
max3:=a[j];
flag:=false;
end;
end;
end;
if flag
then
begin
for k:=1 to 2 do
begin
read(a[k]);
max2:=a[k];
if a[k]>max2
then
begin
max2:=a[k];
flag:=false;
end;
end;
end;
if flag
then a[i]:=max1;
cha:=max4*1000+max3*100+max2*10+max1-max1*1000-max2*100-max3*10-max4;
cha:=a[1]*1000+a[2]*100+a[3]*10+a[4];
end;
if m<8
then write('zhengque',m)
else write('chuowu');
end. 展开
a :array[1..4]of integer;
max4,max3,max2,max1,m,i,j,k:integer;
flag:boolean;
cha:longint;
begin
read(a[1],a[2],a[3],a[4]);
flag:=true;
m:=0;
while cha <>6174 do
begin
m:=m+1;
for i:=1 to 4 do
begin
max4:=a[i];
if a[i]>max4
then
begin
max4:=a[i];
flag:=false;
end;
end;
if flag
then
begin
for j:=1 to 3 do
begin
max3:=a[j];
if a[j]>max3
then
begin
max3:=a[j];
flag:=false;
end;
end;
end;
if flag
then
begin
for k:=1 to 2 do
begin
read(a[k]);
max2:=a[k];
if a[k]>max2
then
begin
max2:=a[k];
flag:=false;
end;
end;
end;
if flag
then a[i]:=max1;
cha:=max4*1000+max3*100+max2*10+max1-max1*1000-max2*100-max3*10-max4;
cha:=a[1]*1000+a[2]*100+a[3]*10+a[4];
end;
if m<8
then write('zhengque',m)
else write('chuowu');
end. 展开
1个回答
展开全部
排序的语句是有问题的。
如果用冒泡法排序,可以这样:
for i:=1 to 3 do
for j:=i+1 to 4 do
begin
if a[i]<a[j] then
begin
k:=a[i];a[i]:=a[j];a[j]:=k;
end;
end;
另外用于while循环的变量cha应该是前次计算的结果,还要把按位拆开放进a数组里。但程序里并没有修改a数组。
中间又读数据进a数组,不知为什么。最后的判断又是做什么?
如果用冒泡法排序,可以这样:
for i:=1 to 3 do
for j:=i+1 to 4 do
begin
if a[i]<a[j] then
begin
k:=a[i];a[i]:=a[j];a[j]:=k;
end;
end;
另外用于while循环的变量cha应该是前次计算的结果,还要把按位拆开放进a数组里。但程序里并没有修改a数组。
中间又读数据进a数组,不知为什么。最后的判断又是做什么?
追答
下面这个程序在TurboPascal7.0下成功运行,供参考:
var
s,t:string;
a:array[1..4] of integer;
i,j,k,m,n,aMax,aMin:integer;
begin
m:=0;
writeln('*** 6174 Math Blackhole Calculation ***');
write('input a 4 digits integer:');
readln(s);
writeln('your input is:',s);
t:=s;
while s'6174' do begin
m:=m+1;
writeln;
writeln('----------------- loop ',m,' ------------------');
for i:=1 to 4 do val(s[i],a[i],j);
writeln('before sorting, a[1]=',a[1],' a[2]=',a[2],' a[3]=',a[3],' a[4]=',a[4]);
for i:=1 to 3 do
for j:=i+1 to 4 do
begin
if a[i]<a[j] then
begin
k:=a[i];a[i]:=a[j];a[j]:=k;
end;
end;
writeln('after sorting, a[1]=',a[1],' a[2]=',a[2],' a[3]=',a[3],' a[4]=',a[4]);
aMax:=a[1];for i:=2 to 4 do aMax:=aMax*10+a[i];
aMin:=a[4];for i:=3 downto 1 do aMin:=aMin*10+a[i];
n:=aMax-aMin;
writeln('aMax=',aMax,' aMin=',aMin,' aMax-aMin=',n);
str(n:4,s);
end;
writeln;
writeln('************** FINISHED :');
writeln(t,' falls into 6174 blackhole in ',m,' loop(s)');
readln;
end.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询