Array124. Дано целое число K > 0 и целочисленный массив размера N. Поменять местами последнюю серию массива и его серию с номером K. Если серий в массиве меньше K, то вывести массив без изменений.
>Решение Pascal
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 70 | program Array124; var a,b : array [1..20] of real; N,K,ki,i,i2,i3,kbegin,kend,klast: 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; // анализируем массив ki:=0; kbegin:=1; for i:=1 to N do if i<>N then if a[i]<>a[i+1] then begin inc(ki); klast:=i+1; //всегда находя новую серию говорим что первый элемент принадлежит последней серии, в конце цикла здесь окажется действительно первый элемент последней серии. if ki+1=k then kbegin:=i+1; //находим первый элемент из серии k if ki=k then kend:=i; //находим последний элемент из серии k end; i:=0; i2:=0; //cобираем массив while ikbegin) and (i<>klast) then begin inc(i2); b[i2]:=a[i]; //добавляем его в конец массива b end; if i=kbegin then //если массив является первым элементом k серии begin for i3:=klast to N do //добавляем последнюю серию в массив b begin inc(i2); b[i2]:=a[i3]; end; i:=kend; //и переносим счётчик в начало следующей серии end; if i=klast then // если текущий элемент является началом последней серии begin for i3:=kbegin to kend do //добавляем k серию в массив b begin inc(i2); b[i2]:=a[i3]; end; i:=N; //переносим счётчик в конец массива, что бы закрылся цикл. end; end; a:=b; for i:=1 to i2 do writeln(a[i]); //выводим полученный массив. end. |
>
Решение C
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 | #include int main(void) { int a[20],b[20]; int n,k; printf("N: "); scanf("%i",&n); printf("K: "); scanf("%i",&k); int i; for (i=0; i<n; ++i){ printf("a[%i] : ",i+1); scanf("%i",&a[i]); } int nk =1, beginkseries=1, lenkseries=(k==1?1:0), beginendseries; for (i=1; i<n; ++i){ if (a[i-1]!=a[i]){ nk++; if (nk==k) beginkseries=i; beginendseries=i; } if (nk==k) lenkseries++; } int i2=-1; for (i=0; i<beginkseries; ++i) b[++i2]=a[i]; for (i=beginendseries; i<n; ++i) b[++i2]=a[i]; for (i=beginkseries+lenkseries; i<beginendseries; ++i) b[++i2]=a[i]; for (i=beginkseries; i<beginkseries+lenkseries; ++i) b[++i2]=a[i]; for (i=0; i<n;++i) a[i]=b[i]; for (i=0; i<n;++i) printf("a %i : %i\n",i+1,a[i]); return 0; } |