Професионална програма
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
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