Loading...
MadHatter avatar MadHatter 2 Точки

Задача "02. Hospital" от "For-Loop - More Exercises" от "PB-More-Exercises".

https://judge.softuni.bg/Contests/Practice/Index/1680#1  - линк към задачата.

https://softuni.bg/downloads/svn/programming-basics-v4/course-content/course-resources/More%20Exercises/5.%20PB-More-For-Loop-Exercises.docx  - линк към условието

Който е решавал Задача "02. Hospital" от "For-Loop - More Exercises" от "PB-More-Exercises". 

Не може да не е забелязал, че вярното решение на задачата според "judge" е напълно не логично. 

По-условие: „Всеки трети ден, болницата прави изчисления и ако броят на не прегледаните пациенти е по-голям от броя на прегледаните, се назначава още един лекар.“

От така написаното условие е логично, че на всеки три дни би трябвало да се сравнява броя  на прегледаните пациенти и броя на не прегледаните пациенти. След което бройката да се нулира, за да се провери за следващите три дни и т.н.

Да, обаче ако напишете кода така, системата за оценяване ви дава грешка. За да я преодолеете се оказва, че трябва да сравнявате  броя  на прегледаните пациенти и броя на не прегледаните пациенти не за последните три дни, а като цяло, но просто на всеки 3 дни.

Което е абсолютно безсмислено, защото ако приемем, че имате 7 лекаря в началото и първия ден имате 100 пациента а на следващите 90 дни 0, вие на всеки 3 дни ще си правите проверката и тя ще показва, че трябва да назначите нов лекар и така накрая ще имате 37 лекаря при 90 дни никакви пациенти. ​​​​​​

Тагове:
0
MiroVatov avatar MiroVatov 1 Точки

Здрасти, 

доста ме поизмъчи задачта, но все пак логиката на задачата си е вярна. Просто твойта логика също е вярна и ще има струпване на повече лекари без работа/пациенти.

Ето го моето решение. Сподели и твоето, да видя кое от двете е по-оптимизирано.

Благодаря.

 

period_days = int(input())
doctor_number = 7
total_threated_patients = 0
total_unthreated_patienst = 0

for i in range(1, period_days + 1):
    daily_threated_patients = 0
    daily_unthreated_patients = 0

    if i % 3 == 0 and total_unthreated_patienst > total_threated_patients:
        doctor_number += 1
    patients_count = int(input())

    if doctor_number >= patients_count:
        daily_threated_patients = patients_count
        daily_unthreated_patients = 0
    if doctor_number < patients_count:
        daily_unthreated_patients = patients_count - doctor_number
        daily_threated_patients = patients_count - daily_unthreated_patients

    total_threated_patients += daily_threated_patients
    total_unthreated_patienst += daily_unthreated_patients

print(f'Treated patients: {total_threated_patients}.')
print(f'Untreated patients: {total_unthreated_patienst}.')







0
MadHatter avatar MadHatter 2 Точки

Когато видя една задача аз си представям, какво се иска от мен, мислейки логично. А решението на тази задача противостои на здравата логика, защото не е логично да назначаваш нови лекари, при положение, че нямаш нужда от тях. Затова и задачата ми не мина с първото – логичното решение, а със второто – не логичното решение.

days = int(input())
doctors = 7
treated_patients = 0
untreated_patients = 0
for period in range(1, days + 1):
    patients_per_day = int(input())
    if period % 3 == 0:
        if untreated_patients > treated_patients:
            doctors +=1
    if patients_per_day <= doctors:
        treated_patients += patients_per_day
    else:
        treated_patients += doctors
        untreated_patients += (patients_per_day - doctors)
print(f'Treated patients: {treated_patients}.')
print(f'Untreated patients: {untreated_patients}.')

0
AlexKadiyski avatar AlexKadiyski 16 Точки

Ето едно решение и за колегите от C#:

 

using System;

namespace _02._Hospital
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = int.Parse(Console.ReadLine());

            int doctors = 7;
            int yesPatient = 0;
            int noPatient = 0;

            for (int i = 1; i <= count; i++)
            {

                if (i % 3 == 0)
                {
                    if (noPatient > yesPatient)
                    {
                        doctors++;
                    }
                }

                int currentPatients = int.Parse(Console.ReadLine());

                if (doctors < currentPatients)
                {
                    yesPatient += doctors;
                    noPatient += currentPatients - doctors;
                }
                else
                {
                    yesPatient += currentPatients;
                }
            }
            Console.WriteLine($"Treated patients: {yesPatient}.");
            Console.WriteLine($"Untreated patients: {noPatient}.");
        }
    }
}

0
Traio avatar Traio 2 Точки

d akolega no v zadachata se pita kolko provereni i ne provereni pacienta ima a ne lekari

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.