Построить дуболомов в одну шеренгу но так, чтобы они опять были расположены по росту от самого высокого к самому низкому - C (СИ)
Формулировка задачи:
#include <stdio.h> int a[100000]; int mn = 0; void merge(int l, int r) { if (r == l) return; if (r - l == 1) { if (a[r] < a[l]) { mn = a[r]; a[r] = a[l]; a[l] = mn; } return; } int m = (r + l) / 2; merge(l, m); merge(m + 1, r); int buf[100000]; int xl = l; int xr = m + 1; int cur = 0; while (r - l + 1 != cur) { if (xl > m) buf[cur++] = a[xr++]; else if (xr > r) buf[cur++] = a[xl++]; else if (a[xl] > a[xr]) buf[cur++] = a[xr++]; else buf[cur++] = a[xl++]; } for (int i = 0; i < cur; i++) a[i + l] = buf[i]; } int main() { int F, L, b[100000], c[100000], k = 0, i = 0, f = 0, j, min = 0, mn = 0; FILE *fp, *mp; fp = fopen("merge.dat", "r"); fscanf(fp, "%d", &F); for(k = 0; k < F; k++) { fscanf(fp, "%d", &a[k]); } fscanf(fp, "%d", &L); for(i = 0; i < L; i++) { fscanf(fp, "%d", &b[i]); } fclose(fp); while(F > 0) { c[f] = a[k]; k++; f++; F--; } while(L > 0) { c[f] = b[i]; i++; f++; L--; } merge(0, f - 1); mp = fopen("merge.dat", "w"); for(i = 0; i < f; i++) { fprintf(mp, "%d\n", c[i]); } fclose(mp); return 0; }
Решение задачи: «Построить дуболомов в одну шеренгу но так, чтобы они опять были расположены по росту от самого высокого к самому низкому»
#include <stdio.h> #define SIZE_A (4) #define SIZE_B (5) #define SIZE_C ( SIZE_A + SIZE_B ) int main(void) { int arrA[SIZE_A] = { 8, 5, 4, 2 }, arrB[SIZE_B] = { 9, 7, 6, 3, 1 }, arrC[SIZE_C], iA, iB, iC; for ( iA = iB = iC = 0; iC < SIZE_C; ++iC ) { if ( iA < SIZE_A ) { if ( iB < SIZE_B ) { if ( arrA[iA] > arrB[iB] ) arrC[iC] = arrA[iA++]; else arrC[iC] = arrB[iB++]; } else arrC[iC] = arrA[iA++]; } else arrC[iC] = arrB[iB++]; } for ( iC = 0; iC < SIZE_C; ++iC ) printf("%d ", arrC[iC]); printf("\n"); return 0; }
Объяснение кода листинга программы
В этом коде задача состоит в том, чтобы построить массив arrC, который будет содержать дуболомов, расположенных в шеренге по росту от самого высокого к самому низкому. Для этого используются три массива: arrA, arrB и arrC. Массив arrA содержит четыре дуболома, массив arrB содержит пять дуболомов, а массив arrC должен будет содержать девять дуболомов после выполнения программы. В первой строке кода объявляются три массива и инициализируются значениями соответствующих размеров. Далее в цикле for происходит процесс заполнения массива arrC. В каждой итерации цикла проверяется, что еще есть дуболомы в массивах arrA и arrB. Если дуболомы в массиве arrA больше, чем в массиве arrB, то выбирается самый высокий дуболом из массива arrA и помещается в массив arrC. Если дуболомы в массиве arrB больше, чем в массиве arrA, то выбирается самый высокий дуболом из массива arrB и помещается в массив arrC. Если дуболомы закончились в массиве arrA, то выбирается самый высокий дуболом из массива arrB и помещается в массив arrC. Если дуболомы закончились в массиве arrB, то выбирается самый высокий дуболом из массива arrA и помещается в массив arrC. После заполнения массива arrC, происходит вывод его содержимого на экран. Этот код можно оптимизировать, если вместо проверки, что дуболомы закончились в массивах arrA и arrB, использовать счетчик, который будет отслеживать количество использованных дуболомов в каждом массиве.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д