mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-22 11:26:07 +00:00
Add translated chapter exercise pages (#1941)
Add dedicated chapter exercise sections and generated exercise pages for the English, Japanese, and Russian editions. Add navigation for all published languages while keeping Taiwan Traditional Chinese exercise pages generated at build time.
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
<!-- Автоматически создано utils/exercises/publish_exercises.py; не редактируйте напрямую. -->
|
||||
|
||||
# Упражнения
|
||||
|
||||
## Вопросы для самопроверки
|
||||
|
||||
### Связи между данными в повседневных ситуациях
|
||||
|
||||
Для каждого из трех примеров выберите по характеру связей между данными один вариант: «линейная структура», «древовидная структура» или «сетевая структура». Объясните свой выбор.
|
||||
|
||||
<!-- numbered-subquestions -->
|
||||
|
||||
1. Ученики стоят в ряд, и каждого интересуют только стоящие непосредственно перед ним и за ним;
|
||||
2. школа организована по уровням «школа → параллель → класс»;
|
||||
3. городские дороги соединяют множество перекрестков: из одного перекрестка можно попасть в несколько других, а дороги могут образовывать циклы.
|
||||
|
||||
??? success "Ответ"
|
||||
|
||||
1. Это линейная структура. Кроме первого и последнего в ряду, каждый ученик соседствует ровно с одним человеком впереди и одним сзади, а связи вытянуты в одну линию.
|
||||
|
||||
2. Это древовидная структура. Каждый класс относится к одной параллели, а каждая параллель — к школе; связи образуют уровни сверху вниз.
|
||||
|
||||
3. Это сетевая структура. Один перекресток может быть связан с несколькими другими, а дороги могут образовывать циклы, поэтому связи нельзя выстроить в единую последовательность или строгую иерархию.
|
||||
|
||||
Определяя структуру, сначала рассматривайте связи между элементами, а не объем памяти, который они занимают.
|
||||
|
||||
### Как сохранить логический порядок в памяти
|
||||
|
||||
Логический порядок `A → B → C` можно сохранить в памяти двумя упрощенными способами:
|
||||
|
||||
- вариант 1: `A, B, C` размещены в ячейках памяти с номерами `20, 21, 22` соответственно;
|
||||
- вариант 2: `A, B, C` размещены в ячейках с номерами `20, 7, 31` соответственно, причем `A` хранит расположение `B`, а `B` — расположение `C`.
|
||||
|
||||
<!-- numbered-subquestions -->
|
||||
|
||||
1. Какой вариант использует хранение в непрерывном, а какой — в разрозненном пространстве памяти?
|
||||
2. Какой вариант ближе к массиву, а какой — к связному списку?
|
||||
3. Почему вариант 2 по-прежнему задает логический порядок `A → B → C`, хотя номера ячеек памяти не упорядочены по величине?
|
||||
|
||||
??? success "Ответ"
|
||||
|
||||
1. Вариант 1 использует соседние ячейки памяти, поэтому хранение происходит в непрерывном пространстве. Узлы в варианте 2 находятся в разных местах, поэтому они хранятся в разрозненном пространстве.
|
||||
|
||||
2. Вариант 1 ближе к массиву, а вариант 2 — к связному списку.
|
||||
|
||||
3. Логический порядок задается связями, записанными между узлами, а не величиной номеров ячеек памяти.
|
||||
По адресу, который хранит `A`, можно найти `B`, а затем по адресу из `B` найти `C`, поэтому элементы по-прежнему доступны в порядке `A, B, C`.
|
||||
|
||||
Это также показывает, что логическая и физическая структуры — два разных взгляда на одни и те же данные.
|
||||
|
||||
### Типы данных и структура записей о домашних заданиях
|
||||
|
||||
Учебная группа записала в порядке рассадки, сдали ли домашнее задание 4 ученика:
|
||||
|
||||
`[true, false, true, true]`
|
||||
|
||||
<!-- numbered-subquestions -->
|
||||
|
||||
1. Какой базовый тип данных подходит для каждого элемента?
|
||||
2. Какую логическую структуру образуют эти 4 элемента, расположенные в ряд по порядку рассадки?
|
||||
3. Если затем записывать оценки за задание каждого ученика как `[90, 0, 85, 100]`, изменится «тип содержимого» или «способ организации» данных? Объясните ответ.
|
||||
|
||||
??? success "Ответ"
|
||||
|
||||
1. Каждый элемент выражает только «да» или «нет», поэтому подходит логический тип `bool`.
|
||||
|
||||
2. Элементы расположены по порядку рассадки и образуют линейную структуру, которую можно хранить в массиве.
|
||||
|
||||
3. Изменится тип содержимого: логические значения будут заменены целыми числами. Способ организации не изменится:
|
||||
данные по-прежнему расположены в ряд по порядку рассадки и могут храниться в массиве как линейная структура.
|
||||
|
||||
Базовый тип данных описывает, «что хранится», а структура данных — «как организованы данные».
|
||||
|
||||
## Задачи по программированию
|
||||
|
||||
### Число единиц в двоичной записи
|
||||
|
||||
Дано неотрицательное целое число `n`. Подсчитайте количество единиц в его двоичной записи.
|
||||
|
||||
Используйте побитовые операции. Не преобразовывайте двоичную запись в строку и не применяйте встроенную функцию, которая напрямую подсчитывает единицы.
|
||||
|
||||
??? tip "Подсказки"
|
||||
|
||||
1. Выражение n & 1 извлекает крайний правый бит n и позволяет проверить, равен ли он 1
|
||||
2. Сдвиг вправо на один разряд отбрасывает текущий крайний правый бит; в большинстве языков для этого используется оператор >>
|
||||
3. Реализовав проверку каждого бита со сдвигом вправо, обратите внимание: n & (n - 1) превращает в 0 крайнюю правую единицу в n
|
||||
|
||||
[LeetCode](https://leetcode.com/problems/number-of-1-bits/){ .rounded-button .exercise-button target="_blank" rel="noopener noreferrer" }
|
||||
Reference in New Issue
Block a user