Skip to content

Create Vec<u32>#38

Open
Tim-tech-gif wants to merge 1 commit into
djnzx:masterfrom
Tim-tech-gif:patch-38
Open

Create Vec<u32>#38
Tim-tech-gif wants to merge 1 commit into
djnzx:masterfrom
Tim-tech-gif:patch-38

Conversation

@Tim-tech-gif

Copy link
Copy Markdown

Щоб реалізувати ці дві функції, спершу розглянемо алгоритм:

Функція count_permutation(shipments: &Vec) -> usize:

Необхідно підрахувати, скільки вантажу потрібно перемістити між кораблями, щоб на кожному було однаково. Для цього спочатку перевіряємо, чи можна взагалі зробити рівний розподіл. Якщо загальна кількість вантажу ділиться на кількість кораблів без залишку, можемо продовжити. Далі для кожного корабля, де вантажу більше за середній, обчислюємо, скільки потрібно перенести до кораблів з меншим вантажем. Функція gen_shipments(n: usize) -> Vec:

Створюємо випадковий вектор розміру n, який можна розподілити рівномірно. Для цього задаємо випадкові значення вантажів, а потім обчислюємо, скільки вантажу потрібно додати або відняти, щоб сума була кратною кількості кораблів.

Функція count_permutation:

Спочатку обчислює загальну кількість вантажу на всіх кораблях. Перевіряє, чи можна рівномірно розподілити вантаж (чи сума ділиться на кількість кораблів без залишку). Підраховує загальну кількість перенесень, необхідних для вирівнювання вантажу. Функція gen_shipments:

Генерує випадковий вектор вантажів для кораблів.
Переконується, що сума вантажів кратна кількості кораблів шляхом коригування першого елемента.

Щоб реалізувати ці дві функції, спершу розглянемо алгоритм:

Функція count_permutation(shipments: &Vec<u32>) -> usize:

Необхідно підрахувати, скільки вантажу потрібно перемістити між кораблями, щоб на кожному було однаково. Для цього спочатку перевіряємо, чи можна взагалі зробити рівний розподіл. Якщо загальна кількість вантажу ділиться на кількість кораблів без залишку, можемо продовжити.
Далі для кожного корабля, де вантажу більше за середній, обчислюємо, скільки потрібно перенести до кораблів з меншим вантажем.
Функція gen_shipments(n: usize) -> Vec<u32>:

Створюємо випадковий вектор розміру n, який можна розподілити рівномірно. Для цього задаємо випадкові значення вантажів, а потім обчислюємо, скільки вантажу потрібно додати або відняти, щоб сума була кратною кількості кораблів.

Функція count_permutation:

Спочатку обчислює загальну кількість вантажу на всіх кораблях.
Перевіряє, чи можна рівномірно розподілити вантаж (чи сума ділиться на кількість кораблів без залишку).
Підраховує загальну кількість перенесень, необхідних для вирівнювання вантажу.
Функція gen_shipments:

Генерує випадковий вектор вантажів для кораблів.
Переконується, що сума вантажів кратна кількості кораблів шляхом коригування першого елемента.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant