Для вычисления двух наименьших нечетных элементов в массиве в языке C следует пройти по всем элементам массива, искать нечетные числа, и затем сохранить два наименьших нечетных числа. Существует несколько подходов для решения этой задачи, но мы рассмотрим два наиболее распространенных способа.
Первый способ заключается в использовании временных переменных для хранения двух наименьших нечетных чисел и последовательного прохода по массиву для поиска и обновления этих переменных:
#include <stdio.h> void findTwoSmallestOdd(int arr[], int size) { int smallestOdd = __INT_MAX__; int secondSmallestOdd = __INT_MAX__; for (int i = 0; i < size; i++) { if (arr[i] % 2 != 0) { if (arr[i] < smallestOdd) { secondSmallestOdd = smallestOdd; smallestOdd = arr[i]; } else if (arr[i] < secondSmallestOdd) { secondSmallestOdd = arr[i]; } } } printf("Первое наименьшее нечетное число: %dn", smallestOdd); printf("Второе наименьшее нечетное число: %dn", secondSmallestOdd); } int main() { int arr[] = {2, 8, 5, 9, 12, 4, 1, 7, 6}; int size = sizeof(arr) / sizeof(arr[0]); findTwoSmallestOdd(arr, size); return 0; }
В данном коде мы проходим по каждому элементу массива и проверяем на нечетность с помощью оператора %
. Если элемент массива нечетный, то проверяем его на минимальность. Если он меньше текущего наименьшего нечетного числа (smallestOdd
), то обновляем переменные соответствующим образом. Если элемент больше или равен (>=
) текущему наименьшему нечетному числу, но меньше текущего второго наименьшего нечетного числа (secondSmallestOdd
), то обновляем только переменную secondSmallestOdd
. В результате получаем первое и второе наименьшие нечетные числа.
Второй способ заключается в сортировке массива и выборе первых двух нечетных чисел:
#include <stdio.h> void findTwoSmallestOdd(int arr[], int size) { // Сортировка массива в порядке возрастания for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } int smallestOdd = -1; int secondSmallestOdd = -1; for (int i = 0; i < size; i++) { if (arr[i] % 2 != 0) { if (smallestOdd == -1) { smallestOdd = arr[i]; } else if (secondSmallestOdd == -1) { secondSmallestOdd = arr[i]; } } } printf("Первое наименьшее нечетное число: %dn", smallestOdd); printf("Второе наименьшее нечетное число: %dn", secondSmallestOdd); } int main() { int arr[] = {2, 8, 5, 9, 12, 4, 1, 7, 6}; int size = sizeof(arr) / sizeof(arr[0]); findTwoSmallestOdd(arr, size); return 0; }
В данном коде мы используем сортировку пузырьком (bubble sort) для сортировки элементов массива в порядке возрастания. Затем мы проходим по отсортированному массиву и выбираем первые два нечетных числа. Этот способ работает, но требует дополнительной памяти и времени для сортировки.
Оба способа приведены как примеры и могут быть адаптированы под конкретные требования вашей задачи.