М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
adamenkofamily
adamenkofamily
12.02.2022 23:51 •  Информатика

Користувач вводить з клавіатури число N.Програма виводить на екран три числа: 1)суму усіх чисел на проміжку від 1 до N;
2)добуток усіх непарних чисел на проміжку від 1 до N;
3)кількість чисел,які діляться на 3 на проміжки 1 до N;
Вхідні дані;
Одне ціле число N
Вхідні дані:
Вивести три числа;1)суму усіх чисел;2)добуток непарних чисел;3)кількість чисел,які діляться на 3

👇
Ответ:
pechenkinaolga5
pechenkinaolga5
12.02.2022

В условии ничего не сказано про язык программирования, так что я написал на удобном себе python.

N = int(input())

s1 = 0

s2 = 0

s3 = 0

a = 1

for i in range(N):

   s1 = s1 + a

   if a % 2 == 1:

       s2 = s2 + a

   if a % 3 == 0:

       s3 = s3 + a

   a = a + 1

print(s1, s2, s3)

4,8(47 оценок)
Открыть все ответы
Ответ:
Danya1111111111135
Danya1111111111135
12.02.2022

1) Какой оператор организует цикл с предусловием?

- repeat <операторы > until условие; (это цикл с постусловием)

- while условие until <оператор>; (это невалидная конструкция)

+ while условие do <оператор>;

- repeat <операторы > do условие. (это невалидная конструкция)

2) Какие из приведенных операторов организуют цикл со счетчиком?

- for i = n1 to n2 do оператор; (тут вместо "=" должно было бы быть ":=". В этом случае получился бы цикл с счетчиком)

- while условие do <оператор>; (это цикл с предусловием)

- repeat <операторы > until условие; (это цикл с постусловием)

+ For i := n1 downto n2 do оператор; (i в цикле перебираются от n1 до n2, если n2 <= n1)

3) Напишите, что будет выведено на экран в ходе выполнения фрагмента программы:

a) FOR k := 1 TO 4 do Write(k);

1234

На каждой итерации выводится i, i пробегает значения от 1 до 4.

b) y := 0; FOR x := 1 TO 9 do y := y + 1; Writeln (y);

9

В отформатированном виде всё выглядит так:

y := 0;

for x := 1 to 9 do

   y := y + 1;

writeln(y);

Сначала y = 0, потом 9 раз к y прибавляется 1, затем полученное значение выводится на экран.

4,6(23 оценок)
Ответ:
fariza1974
fariza1974
12.02.2022
Программа работает неверно: даже на примере из условия вместо 2600 выводится 55*245 = 13475. В программе происходит что-то странное, например, сравниваются элементы последовательности и 8 (зачем?)



Подумаем, как можно было бы решать задачу.
- Наивный сохранить все числа в массив и пробежаться по нему в двойном цикле, в псевдокоде это выглядит примерно так:
max = 0
for i = 1 to n do
  for j = 1 to n do
    if |i - j| >= 8 and max < a[i] * a[j] then
      max = a[i] * a[j]
Это нехорошо и по времени (время выполнения порядка n^2), и по памяти (количество памяти растет с ростом n пропорционально n).
- Немного ускоряем: у нас пары i, j и j, i ничем не отличаются, так что будем считать, что j < i. Учитывая условие, что |i - j| >= 8, получаем, что j <= i - 8. Переписываем:
max = 0
for i = 9 to n do
  for j = 1 to i - 8 do
    if max < a[i] * a[j] then
      max = a[i] * a[j]
Это решение работает в 2 раза быстрее, но этого недостаточно. Памяти тоже слишком много.
- Продолжаем ускорять. Пусть i зафиксировано. Мы пытаемся сравнить a[i] * a[j] с max для всех j от 1 до i - 8. Очевидно, произведение будет максимально, если a[j] - максимум среди a[1], a[2], ..., a[i - 8]. Возможное решение: создадим массив из максимумов среди первых k чисел, и будем сравнивать уже с максимумом.
maximums[1..n]
maximums[1] = a[1]
for i = 2 to n do 
  maximums[i] = max(maximums[i - 1], a[i])
max = 0
for i = 9 to n do
  if max < a[i] * maximums[i - 8] then
    max = a[i] * maximums[i - 8]
Это решение уже работает быстро, но остались проблемы с большим расходом памяти.
- Последний рывок. Заметим, что для того, чтобы разобраться с числом под номером i, нам совсем не нужен массив a, а из массива maximums достаточно знать только maximums[i - 8], ..., maximums[i - 1] - 8 чисел. Так что большие массивы не нужны, их можно убрать. Тогда программа будет эффективна и по времени, и по памяти.

У меня максимумы хранятся в массиве maxs[0..7], все номера берутся по модулю 8. В вашей программе это может быть реализовано иначе.
Pascal:
var
  i, n, t, max: integer;
  maxs: array[0..7] of integer;
begin
  read(n);
  read(t);
  max := 0;
  maxs[1] := t;
  for i := 2 to n do
  begin
    read(t);
    if (i > 8) and (max < t * maxs[i mod 8]) then
      max := t * maxs[i mod 8];
    if t > maxs[(i + 7) mod 8] then
      maxs[i mod 8] := t
    else
      maxs[i mod 8] := maxs[(i + 7) mod 8];
  end;
  write(max);
end.
4,5(85 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ