Array123. Дано целое число K > 1 и целочисленный массив размера 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 | 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. |
>
Решение 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 43 44 | #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 i2=-1, len1series=1, lenkseries=0, endkseries, nk=1; for (i=0; i<20;++i) b[i]=0; for (i=1; (i<n)&&(nk<=k);++i){ if (a[i-1]!=a[i]) nk++; if (nk==1) len1series++; if (nk==k) { lenkseries++; b[++i2]=a[i]; } endkseries=i; } for (i=len1series,nk=1; (i<n)&&(i<endkseries-lenkseries);++i){ if (a[i-1]!=a[i]) nk++; b[++i2]=a[i]; } for (i=0; i<len1series;++i) b[++i2]=a[i]; for (i=endkseries; i<n;++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; } |