Array64. Даны три целочисленных массива A, B и C размера NA, NB, NC соответственно, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера NA + NB + NC) остался упорядоченным по убыванию.
>Решение 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 71 72 73 74 75 76 77 78 79 80 81 | program Array64; type MyArray = array[1..30] of integer; var a,b,c,d,ab: MyArray; NA,NB,NC,k:Integer; Function ConnectionArray(a,b:MyArray;NA,NB:Integer):MyArray; var tempArray: MyArray; i,ia,ib:integer; begin ia:=1; ib:=1; for i:=1 to NA+NB do begin if ia>NA then begin tempArray[i]:=b[ib]; inc(ib); end else if ib>NB then begin tempArray[i]:=a[ia]; inc(ia); end else if a[ia]>b[ib] then begin tempArray[i]:=a[ia]; inc(ia); end else begin tempArray[i]:=b[ib]; inc(ib); end; end; ConnectionArray:=tempArray; end; begin Write('NA: '); Readln(NA); Writeln('A: '); for k:=1 to NA do begin write(k,' :'); readln(a[k]); end; Write('NB: '); Readln(NB); Writeln('B: '); for k:=1 to NB do begin write(k,' :'); readln(b[k]); end; Write('NC: '); Readln(NC); Writeln('C: '); for k:=1 to NC do begin write(k,' :'); readln(c[k]); end; //------------------------------ ab:=ConnectionArray(a,b,NA,NB); d:=ConnectionArray(ab,c,NA+NB,NC); Writeln('D(',NA+NB+NC,'):'); for k:=1 to NA+NB+NC do writeln(k,' :',d[k]); 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 45 46 47 48 49 50 51 | #include int main(void) { float a[10],b[10],c[10],d[30]; int na,nb,nc,nd,k; printf("Na: "); scanf("%i",&na); for (k=0; k<na; ++k){ printf("a[%i] : ",k+1); scanf("%f",&a[k]); } printf("Nb: "); scanf("%i",&nb); for (k=0; k<nb; ++k){ printf("b[%i] : ",k+1); scanf("%f",&b[k]); } printf("Nc: "); scanf("%i",&nc); for (k=0; k<nc; ++k){ printf("c[%i] : ",k+1); scanf("%f",&c[k]); } nd=na+nb+nc; int ka=0,kb=0,kc=0; for (k=0; k<nd; ++k){ if ((ka<na) &&((kb>=nb)||(a[ka]>=b[kb]))&&((kc>=nc)||(a[ka]>c[kc]))){ d[k]=a[ka]; ++ka; }else if ((kb<nb) && ((kc>=nc)||(b[kb]>c[kc]))){ d[k]=b[kb]; ++kb; } else { d[k]=c[kc]; ++kc; } } printf("D: \n"); for (k=0; k<nd; ++k) printf(" %i: %f\n",k+1,d[k]); return 0; } |
а можно решение на С++ ?