Въпроси от колеги

Общност за взаимопомощ - попитайте и помогнете на колегите от Вашата област.

Програмиране и програмни езици Синтез и анализ на алгоритми
ИП
Иван Петров
Русенски Университет - Ангел Кънчев · 07.12.2019 · 1079 прегледа

Помощ за задача

Някой може ли да ми помогне с решаването на задачата
Помощ за задача

1 отговор

Най-добър отговор · с най-много благодарности
2
ДСДобромир Стефанов
Добромир Стефанов
Технически университет · 15.12.2019
Здравей,

На какъв език трябва да се реализира решението?
Иначе логиката за решаване е съвсем проста:
- Трябва ти едно queue (опашка, FIFO - first in, first out), в която влизат клиентите. Тук под клиент не се разбира точно 1 човек, а броя на хората, които искат да седнат на дадена маса. Идеята на FIFO е че тези, които са първи, трябват да бъдат обслужени първи.
- Броят и вида на масите може да се съхранява както в масив, така и в някакъв hash-map (dictionary или по друг начин в програмните езици). Ако изберем масив - може да използваме 1 или 3 масива за пазене на масите:
а) Ако целим използване на малко място и бързо действие - Един масив. С общо 20 елемента. Като от 0 до 9-ти индекс са елементите за маси с 2 места, от 10ти до 14-ти тези с 4 места и от 15 до 19 тези с 6 места). Масивът може просто да число, бит или boolean, който казва дали дадения индекс е свободен 0 (true) или е заета 1 (false);
б) Ако целим малко повече яснота в кода може да използваме 3 масива, като логиката е същата.
- Да речем, че искаме да пестим място и сме избрали решението с 1 масив. При влизане на клиент/и проверяваме спрямо тяхната бройка дали в масива в този диапазон от индекси имаме такъв, който е със свободно място (0). Ако е свободно ги "настаняваме" (тоест стойността на елемента в масива става 1) и махаме клиентите от опашката.

Пример с псевдо код:

int[] tables = [0, 0, 0, ...]; // Може да попълним масива с 20 нули в цикъл
int customers_count = stdin(); // Четем броя клиенти от STDIN

if (customers_count > 0 && customers_count < 3) {
// Проверка с for или най- добре да изкараме логиката в друга фунцкия в която обхождаме
// масива от 0 до 9 и проверява за първи свободен индекс, като му даваме стойност 1
}
else if (customers_count > 2 && customers_count < 5) {
// Същото само че вече са за елементите от 10 до 14
}

и т.н.

Ако имаш още въпроси, може да пишеш тук.
2

За да отговорите, трябва да сте влезли в профила си.

Влезте