Array123. Дано целое число $$K (\gt 1)$$ и целочисленный массив размера $$N$$. Поменять местами первую серию массива и его серию с номером $$K$$. Если серий в массиве меньше $$K$$, то вывести массив без изменений.
Решение:
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 59 60 61 62 63 64 65 66 67 68 69 |
program Array123; var a,b : array [1..20] of real; N,K,i,i2,ki,tempi: integer; addSeries:boolean; begin Write('N: '); Readln(N); Write('K: '); Readln(K); Writeln('A: '); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; tempi:=0; ki:=1; //в начале в массив b заносим значения из k раздела for i:=1 to N do begin if ki = K then begin inc(tempi); b[tempi]:=a[i]; end; if i<>N then if a[i]<>a[i+1] then inc(ki); end; //дальше заполняем весь массив значениями addSeries:=False; ki:=1; for i:=1 to N do begin //если значение не из перой серии и не является k-ой серией перенести значение в массив b if (ki > 1) and (ki <> K) then begin inc(tempi); b[tempi]:=a[i]; end; // если значение принадлежит k серии то добавляем вместо него 1 серию. if (ki = K) and not(addSeries) and (k <> 1) then //если задано k равной 1 ничего не делать begin i2:=0; addSeries:=True; // говорим что один раз уже добавили массив repeat inc(tempi); inc(i2); b[tempi]:=a[i2]; until (a[i2]<>a[i2+1]) end; //смотрим будет ли следующий элемент из другой серии, если да то увеличивем значение ki if i<>N then if a[i]<>a[i+1] then inc(ki); end; a:=b; for i:=1 to tempi do writeln(a[i]); end. |
Задачи из раздела Array можно посмотреть здесь.
Много букв не осилил 🙂
только в 60 строчке какая то странная функция Massiv. А что она должна делать?
Потому как в коде объяснения этому нет 🙂
Куда то пропала процедура построения массива ^^»
Решение двумя реверсами. Позже попробую еще вставкой плюс циклический сдвиг.