Array64. Даны три целочисленных массива $$A$$, $$B$$ и $$C$$ размера $$N_A$$, $$N_B$$, $$N_C$$ соответственно, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результирующий целочисленный массив $$D$$ (размера $$N_A + N_B + N_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 <stdio.h> 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; } |
Другие задачи из раздела Array можно посмотреть здесь.
Комментарии: