Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3186146
А
Аноним
09 мая 2025 10:49 · публичный вопрос
А
Аноним

В программе описан одномерный целочисленный массив с индексами от 0 до 10. Ниже представлен фрагмент программы, обрабатывающей данный массив: n:=10; for i:=0 to n do begin K :=…

Запрос пользователя

В программе описан одномерный целочисленный массив с индексами от 0 до 10. Ниже представлен фрагмент программы, обрабатывающей данный массив: n:=10; for i:=0 to n do begin K := A[i]; A[K] := 0; end; В начале выполнения этого фрагмента в массиве находились числа 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, т. е. A[0] = 10, A[1] = 9 и т. д. Сколько элементов массива после выполнения программы будут иметь ненулевые значения?

Ответ нейросети
09 мая 2025 10:49

Давайте подробно разберем этот фрагмент программы и то, что случится с массивом в процессе выполнения.

Исходные условия:
Массив A имеет длину 11 элементов (от 0 до 10).
Изначально массив такой:
A[0] = 10
A[1] = 9
A[2] = 8
A[3] = 7
A[4] = 6
A[5] = 5
A[6] = 4
A[7] = 3
A[8] = 2
A[9] = 1
A[10] = 0

Обратите внимание, что все элементы — это числа от 0 до 10, расположенные в убывающем порядке.

Теперь посмотрим на код:

n := 10;
for i := 0 to n do begin
  K := A[i];
  A[K] := 0;
end;

Поясним по шагам.


Итерация по i от 0 до 10:

Изначально:

i A[i] K Что происходит
0 10 10 A[10] := 0

После этого шага:
A[10] становится 0, массив:
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] — изначально, лишь A[10] поменялось с 0 на 0, нееет, ничего не поменялось, потому что A[10] уже было 0.


Следующая итерация i=1:
K := A[1] = 9
A[9] := 0

Теперь:
A[9] = 0

Массив:
[10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 0]


i=2:
K := A[2] = 8
A[8] := 0

Массив:
[10, 9, 8, 7, 6, 5, 4, 3, 0, 0, 0]


i=3:
K := A[3] = 7
A[7] := 0

Массив:
[10, 9, 8, 7, 6, 5, 4, 0, 0, 0, 0]


i=4:
K := A[4] = 6
A[6] := 0

Массив:
[10, 9, 8, 7, 6, 5, 0, 0, 0, 0, 0]


i=5:
K := A[5] = 5
A[5] := 0

Массив:
[10, 9, 8, 7, 6, 0, 0, 0, 0, 0, 0]


i=6:
K := A[6] = 0 (потому что A[6] = 0, после предыдущего шага)
A[0] := 0

Массив:
[0, 9, 8, 7, 6, 0, 0, 0, 0, 0, 0]


i=7:
K := A[7] = 0
A[0] := 0 (уже было 0)

Массив ничего не меняет.


i=8:
K := A[8] = 0
A[0] := 0

Ничего не меняется.


i=9:
K := A[9] = 0
A[0] := 0

Нет изменений.


i=10:
K := A[10] = 0
A[0] := 0

Нет изменений.


Итоговая ситуация с массивом:

индекс значение комментарий
0 0 изменился в ходе выполнения
1 9 не подвергался изменениям после initial
2 8 не подвергался изменению после initial
3 7 аналогично
4 6
5 0 было изменено в ходе выполнения
6 0 было тоже изменено (после обращения к A[6])
7 0
8 0
9 0
10 0 изначально равно 0, осталось так

Ответ:

Какие элементы остались ненулевыми?
Это те, которые не были задействованы при присваивании 0 во время выполнения. Изначально все элементы были числами от 0 до 10, внутри цикла:

  • После первых нескольких итераций значение A[i] становилось 0, и затем значение по адресу, равному этому числу, тоже становилось 0.
  • В конце, единственные элементы, которые так и остались ненулевыми — это те, которые не были использованы в качестве индекса (все индексы от 0 до 10 были использованы, при обращении к A[6], например, присваивание 0 произошло).

На стадии завершения программы:

  • A[1] = 9 (не было изменено после инициализации — так как при i=1, K=9, затем A[9]=0)
  • A[2] = 8 — равно 8, и не менялось.
  • A[3] = 7 — равно 7.
  • A[4] = 6 — равно 6.
  • А остальные элементы стали 0 или 0.

Итог:
Работая по шагам, мы видим, что только элементы с индексами 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 — подвержены изменениям, при этом:

  • После выполнения цикла, элементы с индексами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 — по сути, все были либо изменены, либо остались такими, как были до изменения.

Но внимательно — изначально:

  • A[0] = 10, а после выполнения — стало 0.

  • Аналогично, остальные значениями были изначально, и только спустя итерации получили значения 0.

Итоговая таблица после выполнения:

индекс значение статус
0 0 изменен (был 10)
1 9 остался не изменён, кроме как в начале, был 9
2 8 —
3 7 —
4 6 —
5 0 стал 0 после итерации 5
6 0 обновился после i=6
7 0 —
8 0 —
9 0 —
10 0 —

Сколько элементов остались ненулевыми?

Общие: изначально все были числами от 0 до 10, но после выполнения многими они стали нулями.

Ответ:
Остались ненулевыми только те элементы массива, которые не были задействованы в цикле для присваивания нулей, то есть — A[1] = 9, A[2] = 8, A[3] = 7, A[4] = 6. Эти элементы не подвергались изменению в процессе.

Всего таких элементов: 4.


Ответ:

В массиве после выполнения программы останутся 4 элемента с ненулевыми значениями.