Нахождение чисел, сумма которых близка к R
Запись от avraal размещена 22.11.2016 в 19:27
Столкнулся с заданием: в одномерном массиве из N найти два различных элемента, сумма которых наиболее близка к числу R, вывести эти элементы. А так же вывести элементы, которые находятся между ними, или вывести сообщение о том, что оба элемента находятся рядом Приступлю сразу к решению задачи: Поскольку мне нужно найти сумму двух элементов, которые могут не находится рядом, решил использовать 2 цикла Через эти циклы я нашёл все сочетания элементов (первый элемент+второй элемент, первый элемент+третий элемент) Потом делаю проверку на выход второго значения за пределы массива (строки 4-5) Если модуль разницы суммы i-тего и j-тего элемента с R меньше мой временной переменной _tmp (по-умолчанию равна 0), то в эту переменную модуль разницы я и записываю (строка 8) Так же есть 2 переменные f(first) и s(second) - они указывают на текущий индекс массива, что позволяет мне запомнить порядковый номер элементов, сумма которых наиболее близка к R
Для этого я создаю еще один массив, и переменную отвечающую за его размер Размер нового массива вычисляется следующим образом: поскольку индекс s всегда будет больше индекса f, то я просто нахожу разницу между ними
Вычисляется это, относительно, просто: если каким-то образом разница между s и f равна 0 (ну мало ли) или если разница равна второму индексу (по идее, sec_size = 0 если индекс f равен 0)
И напоследок, я вывожу эти массивы Полный код можно найти тут: Кликните здесь для просмотра всего текста
Надеюсь, кому-то моя запись поможет Спасибо за внимание |
Всего комментариев 1
Комментарии
-
сча ступлю))) зачем аж 2 цикла? рассмотрим последовательность натуральных положительных чисел вв максиве $alfa
$gamma=ориентир;
while($alfa!=null){
$beta++;
if($alfa<$gamma){
if $gamma-$alfa[$i]>$gamma[$delta]){$delta=$beta;}
}else{
....}
}
В случае если нужно вернуть несколько значений то превращаем дельту в массив и производим сравнение по наиболее отдалённому элементуЗапись от abrdabr размещена 22.11.2016 в 20:38