Найдите сумму трех наибольших отрицательных четных элементов исходного массива Р(22) - C (СИ)
Формулировка задачи:
Найдите сумму трех наибольших отрицательных четных элементов исходного массива Р(22).
Решение задачи: «Найдите сумму трех наибольших отрицательных четных элементов исходного массива Р(22)»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int cmp(void* const a, void* const b)
{
int x = *(int*)a;
int y = *(int*)b;
if (x >= 0 && y >= 0) return 0;
if (x >= 0 && y < 0) return 1;
if (x < 0 && y >= 0) return -1;
int x1 = x & 1;
int y1 = y & 1;
if (x1 != 0 && y1 != 0) return 0;
if (x1 != 0 && y1 == 0) return 1;
if (x1 == 0 && y1 != 0) return -1;
return x > y ? -1 : x != y;
}
int main(void)
{
srand(time(NULL));
int p[22];
size_t i;
for (i = 0; i < 22; i++) {
p[i] = rand() % 30 - 20;
printf("%d ", p[i]);
}
putchar('\n');
qsort(p, 22, sizeof(int), cmp);
int sum = 0;
for (i = 0; i < 3; i++) {
sum += p[i];
printf("%d ", p[i]);
}
putchar('\n');
printf("%d\n", sum);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создается массив
pтипаintразмером 22. - Заполняется массив случайными отрицательными четными числами с помощью функции
rand(). - Выводится на экран содержимое массива.
- Массив сортируется по заданному условию с помощью функции
qsort()и функции сравненияcmp(). - Находится сумма трех наибольших отрицательных четных элементов массива с помощью цикла
forи переменнойsum. - Выводится на экран найденная сумма.
- Завершается программа.