• В массиве из N элементов, заданных случайным образом из промежутка [-20;60], найдите произведение всех элементов, больших 20 (pascal abc)

Ответы 1

  • Из сложностей может возникнуть только генерация случайного значения. Функция random(x) возвращает случайное число от 0 до x-1. Когда функция возвращает 0 (минимальное значение), нам нужно, чтобы оно превратилось в 20. Будем отнимать 20 от значения функции random(x):

    a[i] := random(x) - 20;

    Самое большое число, которое мы хотим получить - 60. Так как мы отнимаем 20, самое большое число, которое должна вернуть функция random(x) равно 80. Значит, x равен 81:

    a[i] := random(81) - 20;

    Кстати, произведение может получаться слишком большим, а тип данных integer может хранить числа не больше 32767. Поэтому мы должны хранить произведение как longint. Оно позволяет хранить числа до 2^{31}-1

    Код

    var

     a: array[1..1000] of integer;

     i, n: integer;

     ans: longint;

    begin

     read(n);

     ans:=1;

     for i:=1 to n do

     begin

       a[i]:=random(81)-20;

       if a[i] > 20 then ans:=ans*a[i];

     end;

     writeln(ans);

    end.

    • Автор:

      penelope
    • 6 лет назад
    • 0
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years