Найти два соседних элемента массива, сумма которых наиболее близка к числу R - C (СИ)
Формулировка задачи:
Прошу помочь.
Дано число R и массив размера N. Найти два соседних элемента массива, сумма которых наиболее близка к числу R, и вывести эти элементы в порядке возрастания их индексов (то есть такой элемент AK, для которого величина |AK – R| является минимальной).
Решение задачи: «Найти два соседних элемента массива, сумма которых наиболее близка к числу R»
textual
Листинг программы
- #include <limits.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char** argv)
- {
- int r = 8, array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10 };
- unsigned idx = 0, diff = UINT_MAX;
- for(int i = 0; i < (sizeof(array) / sizeof(int)) - 1; ++i)
- {
- if((array[i] + array[i + 1] - r) < abs(diff))
- {
- idx = i;
- diff = abs((array[i] + array[i + 1] - r));
- }
- }
- printf("Cумма %d и %d наиболее близка числу %d\n", array[idx], array[idx + 1], r);
- return EXIT_SUCCESS;
- }
Объяснение кода листинга программы
В этом коде ищется два соседних элемента массива, сумма которых наиболее близка к числу R. Список действий:
- Объявляются переменные:
- r = 8 (считаем, что искомое число R равно 8)
- array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10} (считаем, что это исходный массив)
- idx = 0 (считаем, что индекс искомого элемента массива равен 0)
- diff = UINT_MAX (считаем, что разница между суммой элементов и числом R в данном случае равна максимальному значению типа unsigned int)
- Запускается цикл, который проходит по всем элементам массива, кроме последнего (для того чтобы не суммировать элемент с самим собой)
В каждой итерации цикла выполняется следующая последовательность действий:
- Вычисляется разница между суммой текущих и следующих элементов массива и числом R
- Если эта разница меньше, чем текущая разница (т.е. текущая сумма ближе к числу R), то обновляются переменные idx и diff
- После завершения цикла выводится сообщение с найденными элементами и числом R
- Код завершается с успехом
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д