Array63. Даны два массива $$A$$ и $$B$$ размера $$5$$, элементы которых упорядочены по возрастанию. Объединить эти массивы так, чтобы результирующий массив $$C$$ (размера $$10$$) остался упорядоченным по возрастанию.
Решение:
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
program Array63; var a,b:array[1..5] of integer; c:array[1..10] of integer; ka,kb,k:Integer; begin Writeln('A: '); for k:=1 to 5 do begin write(k,' :'); readln(a[k]); end; Writeln('B: '); for k:=1 to 5 do begin write(k,' :'); readln(b[k]); end; ka:=1; kb:=1; for k:=1 to 10 do begin if ka>5 then begin c[k]:=b[kb]; inc(kb); end else if kb>5 then begin c[k]:=a[ka]; inc(ka); end else if a[ka]<b[kb] then begin c[k]:=a[ka]; inc(ka); end else begin c[k]:=b[kb]; inc(kb); end; end; Writeln('C:'); for k:=1 to 10 do writeln(k,' :',c[k]); end. |
Решение от olegst1975:
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 26 27 28 29 30 |
type mas=array [1..10]of real; var i:integer; ia:integer:=1; ib:integer:=1; ic:integer:=1; a,b,c:mas; procedure add_mass(var a,b,c:mas;ia,ib,ic:integer); begin if (ib=6)or((a[ia]<b[ib])and(ia<6)) then begin if ia=6 then exit; c[ic]:=a[ia]; add_mass(a,b,c,ia+1,ib,ic+1); end else begin c[ic]:=b[ib]; add_mass(a,b,c,ia,ib+1,ic+1); end; end; begin for i:=1 to 5 do read(a[i]); for i:=1 to 5 do read(b[i]); add_mass(a,b,c,ia,ib,ic); for i:=1 to 10 do write(c[i]); end. |
Задачи из раздела Array можно посмотреть здесь.
[/crayon]
рекурсия… ну а почему бы и нет….
только конструкцию
ia:integer:=1;
ib:integer:=1;
ic:integer:=1;
первый раз вижу… как низко пал какой то компилятор 🙂