PASCAL编程问题
一道PASCAL程序题,输入a1,a2,a3,....a20将它们从小到大排序后输出,并给出现在每个元素所对应的原来次序。例如输入27,3,25,27,14,39输出32...
一道PASCAL程序题,输入a1,a2,a3,....a20将它们从小到大排序后输出,并给出现在每个元素所对应的原来次序。例如输入27,3,25,27,14,39
输出
3 2
14 5
25 3
27 1
27 4
为什么回答的每个程序都在一个差不多的地方出错???有没有正确的???? 展开
输出
3 2
14 5
25 3
27 1
27 4
为什么回答的每个程序都在一个差不多的地方出错???有没有正确的???? 展开
13个回答
展开全部
思路:用一个二维数组,比如a,a[n,1]用来记录数字,a[n,2]用来记录原来的顺序,然后把a[n,1]从小到大排序,a[n,2]也随着改变位置,排好后再按顺序输出a[n,1]和a[n,2]
程序:
var
a:array[1..20,1..2] of integer;
i,j,z:integer;
begin
for i:=1 to 20 do
begin
read(a[i,1]);
a[i,2]:=i;
end;
for i:=1 to 19 do
for j:=i+1 to 20 do
begin
if a[i,1]>a[j,1] then
begin
z:=a[i,1];
a[i,1]:=a[j,1];
a[j,1]:=z;
z:=a[i,2];
a[i,2]:=a[j,2];
a[j,2]:=z;
end;
for i:=1 to 20 do
begin
write(a[i,1],' ',a[i,2]);
writeln;
end;
end.
程序:
var
a:array[1..20,1..2] of integer;
i,j,z:integer;
begin
for i:=1 to 20 do
begin
read(a[i,1]);
a[i,2]:=i;
end;
for i:=1 to 19 do
for j:=i+1 to 20 do
begin
if a[i,1]>a[j,1] then
begin
z:=a[i,1];
a[i,1]:=a[j,1];
a[j,1]:=z;
z:=a[i,2];
a[i,2]:=a[j,2];
a[j,2]:=z;
end;
for i:=1 to 20 do
begin
write(a[i,1],' ',a[i,2]);
writeln;
end;
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
const n=20;
var a:array[1..n] of integer;
b:array[1..n] of integer;
i,j,t:integer;
begin
for i:=1 to n do
begin
b[i]:=i;
read(a[i]);
end;
for i:=1 to n-1 do
for j:=1 to n-i do
if a[j]>a[j+1] then
begin
t:=a[j];a[j]:=a[j+1];a[j+1]:=t;
t:=b[j];b[j]:=b[j+1];b[j+1]:=t;
end;
for i:=1 to n do writeln(a[i]:5,b[i]:4);
end.
var a:array[1..n] of integer;
b:array[1..n] of integer;
i,j,t:integer;
begin
for i:=1 to n do
begin
b[i]:=i;
read(a[i]);
end;
for i:=1 to n-1 do
for j:=1 to n-i do
if a[j]>a[j+1] then
begin
t:=a[j];a[j]:=a[j+1];a[j+1]:=t;
t:=b[j];b[j]:=b[j+1];b[j+1]:=t;
end;
for i:=1 to n do writeln(a[i]:5,b[i]:4);
end.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for i:=1 to 20 do read(a[i]);
readln;
for i:=1 to 20 do b[i]:=i;
for i:=1 to 19 do
for j:=i+1 to 20 do
if a[i]>a[j] then begin a[i]:=a[i]+a[j];a[j]:=a[i]-a[j];a[i]:=a[i]-a[j];b[i]:=b[i]+b[j];b[j]:=b[i]-b[j];b[i]:=b[i]-b[j];end;
for i:=1 to 20 do writeln(a[i],' ',b[i]);
这道题很简单,关键想到B数组记录位置,这种方法在以后编程有辅助性作用
readln;
for i:=1 to 20 do b[i]:=i;
for i:=1 to 19 do
for j:=i+1 to 20 do
if a[i]>a[j] then begin a[i]:=a[i]+a[j];a[j]:=a[i]-a[j];a[i]:=a[i]-a[j];b[i]:=b[i]+b[j];b[j]:=b[i]-b[j];b[i]:=b[i]-b[j];end;
for i:=1 to 20 do writeln(a[i],' ',b[i]);
这道题很简单,关键想到B数组记录位置,这种方法在以后编程有辅助性作用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
排序用冒泡或者快排都可以
如果你高兴 用排序二叉树 或者堆都可以
输出原来的位置只需要开一个数组来记录下每个数的位置即可 或者干脆每次去扫都可以 反正你的数据规模很小
如果你高兴 用排序二叉树 或者堆都可以
输出原来的位置只需要开一个数组来记录下每个数的位置即可 或者干脆每次去扫都可以 反正你的数据规模很小
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var i,j,k,n:longint;
a,b:array[1..20]of longint;
begin
for i:=1 to 20 do b[i]:=i;
for i:=1 to 20 do read(a[i]);
for i:=1 to 19 do begin
for j:=i+1 to 20 do begin
if a[i]>a[j] then begin
k:=a[i];a[i]:=a[j];a[j]:=k;
n:=b[i];b[i]:=b[j];b[j]:=n;
end;
end;
end;
for i:=1 to 20 do begin
write(a[i],' ',b[i]);
writeln;
end;
end.
a,b:array[1..20]of longint;
begin
for i:=1 to 20 do b[i]:=i;
for i:=1 to 20 do read(a[i]);
for i:=1 to 19 do begin
for j:=i+1 to 20 do begin
if a[i]>a[j] then begin
k:=a[i];a[i]:=a[j];a[j]:=k;
n:=b[i];b[i]:=b[j];b[j]:=n;
end;
end;
end;
for i:=1 to 20 do begin
write(a[i],' ',b[i]);
writeln;
end;
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询