Захаров-Иванович
?>

Ввести массив f(n) вещественных чисел. если последний элемент массива положительный, то найти max среди элементов массива и заменить его значений последний элемент массива. массив распечатать. иначе – дать сообщение «массив остался без изменений»

Информатика

Ответы

eizmaylova6
Program zadacha; const n = 5; var a: array[1..n] of real; i, j: integer; begin writeln('введите ', n, ' чисел через пробел'); for i : = 1 to n doread(a[i]); if a[n] > = 0 thenbeginj : = 1; for i : = 1 to n do if a[i] > a[j] then j : = i; a[n] : = a[j]; for i : = 1 to n do write(a[i], ' '); end else writeln('массив остался без изменений'); readln; end.
Baidina
Var       k: integer;       a, s: real; begin       write('начальная стоимость: ');       readln(a);       write('число проданных газет:   ');       readln(k);             if k < = 50 then s : = k * a       else       begin               s : = 50 * a;               s : = s + (k - 50) * a * 1.2;       end;       writeln('выручка составила  ', s, ' руб.'); end.
info22
Алгоритм.  отсортируем массив за o(nlogn). запустим цикл по всем k, в теле цикла будем искать индексы i < = j, такие, что a[i] + a[j] = -a[k]. понятно, что этот поиск надо делать за o(n), чтобы общее время работы было квадратичным. искать будем с двух указателей. рассмотрим кусок массива, в котором ищем ответ a[l..r] (первоначально l = 1, r = n). посмотрим на a[l] + a[r]. если эта сумма больше, чем нужно, уменьшим на 1 число r, если меньше - увеличим на 1 число l, если равно -a[k] - победа, выводим ответ (l, r,  k). будем повторять это в цикле, пока l не станет больше r. если после выполнения цикла по k искомая тройка так и не нашлась, пишем "нет". корректность. пусть в какой-то момент a[l] + a[r] < -a[k]. тогда, чтобы иметь возможность получить a[i] + a[j] = -a[k], надо сумму увеличить. a[l] оказалось настолько мало, что даже если прибавить к нему самое большое возможное число (а это как раз a[r] - массив-то то всё равно получается слишком мало. значит, a[l] в ответе не будет, и можно безбоязненно выкинуть его из рассмотрения. аналогично будет и в случае, когда a[l] + a[r] > -a[k]. осталось показать, что если такая тройка индексов существует, то наш алгоритм не выдаст неверный ответ "нет". но это очевидно: если ответ (i, j, k), то уж при k = k алгоритм что-нибудь да найдёт. время работы. внутренний цикл выдает ответ не более чем  за линейное время: всякий раз размер массива уменьшается на 1, всего элементов в массиве n, а на каждом шаге тратится константное время; пусть время выполнения внутреннего цикла t'(n) < an. тогда все n проходов внешнего  цикла затратят время t1(n) < = n t'(n) < an^2. сортировку можно сделать за время t2(n) < b nlogn < bn^2 общее время работы t(n) = t1(n) + t2(n) < an^2 + bn^2 = cn^2

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Ввести массив f(n) вещественных чисел. если последний элемент массива положительный, то найти max среди элементов массива и заменить его значений последний элемент массива. массив распечатать. иначе – дать сообщение «массив остался без изменений»
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

aluka
anyakru94
Эдуардович873
mail5
Никита_Тузов
Yurevich1701
basil69
НатальяРуктешель472
chavagorin
helena-belozerova
Zebra198383
ВладимировнаИП37
mstapottery
sales5947
snopovajulia