Дан одномерный массив, сформировать из него двухмерный отсортированный змейкой: начиная с правого нижнего угла вертикально. pascal abc вот код, только здесь выводится с левого угла, а мне нужно с правого: uses crt; var a: array [1..25] of integer; ar: array [1..25,1..25] of integer; i,n,s,j,x: integer; b: real; l: boolean; begin write('n='); readln(n); writeln('заполните массив: '); for i: =1 to n do readln(a[i]); for i: =1 to n do for j: =i+1 to n do if a[i]> a[j] then begin x: =a[i]; a[i]: =a[j]; a[j]: =x; end; s: =1; writeln('отсортированный массив: '); for i: =1 to n do write(a[i], ' '); writeln; b: =sqrt(n); n: =round(b); writeln('двумерный массив: '); for j: =1 to n do begin for i: =1 to n do begin ar[i,j]: =s; if (j mod 2 = 0) and (i< > n) then dec(s) else inc(s); end; s: =s+n-1; end; for i: =n downto 1 do begin for j: =1 to n do write(ar[i,j]); writeln; end; end.
crt;
var
a: array [1..25] of integer;
ar: array [1..5, 1..5] of integer;
i, j, k, n, m, x: integer;
begin
write('n=');
readln(n);
writeln('Заполните массив:');
for i := 1 to n do read(a[i]);
for i := 1 to n do
for j := i + 1 to n do
if a[i] > a[j] then begin
x := a[i];
a[i] := a[j];
a[j] := x;
end;
writeln('Отсортированный массив: ');
for i := 1 to n do write(a[i], ' ');
writeln;
n := floor(sqrt(n));
m := sqr(n);
writeln('Двумерный массив: ');
for k := 1 to m do
begin
x := (k - 1) div n;
j := n - x;
if x mod 2 = 0 then
i := n * (x + 1) + 1 - k
else
i := k - n * x;
ar[i, j] := a[k]
end;
for i := 1 to n do
begin
for j := 1 to n do write(ar[i, j]:4);
writeln
end
end.
Тестовое решение:
n=16
Заполните массив:
1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16
Отсортированный массив:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Двумерный массив:
13 12 5 4
14 11 6 3
15 10 7 2
16 9 8 1
n=25
Заполните массив:
1 3 5 7 9 11 2 4 6 8 10 12 14 13 16 17 15 20 18 19 23 25 22 21 24
Отсортированный массив:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Двумерный массив:
25 16 15 6 5
24 17 14 7 4
23 18 13 8 3
22 19 12 9 2
21 20 11 10 1