Loading...
stefism1 avatar stefism1 28 Точки

While-Loop - Exercise, 05. Cake

Здравейте,
Имам следния проблем с въпросната задача.
Условието на задачата най-вероятно е или объркано, или недописано и поради тази причина на тест № 1 в judge дава грешен отговор.

В условието на задачата е казано - " Ще получите размерите на тортата (широчина и дължина – цели числа в интервала [1...1000]) и след това на всеки ред, до получаване на командата "STOP" или докато не свърши тортата, броят на парчетата, които гостите вземат от нея."

Момолих Деси (която впрочем също каза, че условието било объркано и е докладвано) да ми прати входа на въпросния тест и с изненада открих, че теста подава следните числа:

2
2
4
10
STOP
Очаквания изход за което е No more cake left! You need 10 pieces more.

Начи, аз че принципно немога да смятам - немога, ама ама две и две, винаги си е било 4 и съгласно условието, когато на третия ред се подаде 4, парчетата свършват и толкоз. От къде дойде това допълнително 10 от долу?!
Може ли някой да ми разясни правилното условие на въпросната задача за да мога да я реша правилно и евентуално да прати код на C# за нея?
И като втори под въпрос - същото нещо го пуснах и във Фейсбук групата и поста ми странно защо беше премахнат?!
Та защо махнахте този пост ми е мисълта?

0
Programming Basics 07/02/2019 11:29:57
iGeorg1ev avatar iGeorg1ev 223 Точки

Здравей,

Както е казал колегата парчетата стават 0 и в текущата итерация не вижда дали тортата е свършила. Ако държиш да стане в текущата итерация може да сложиш проверка в края на цикъла да го чупи. Нещо от рода: 

if (cakePieces == 0)

{

break;

}

Но тъй като условието е направено така, че при 0 парчета да се подаде ново вход, Джъдж ще гърми. Така че това е само за идея как да не чакаш нова итерация на цикъла.

Иво

 

0
stefism1 avatar stefism1 28 Точки

Мерси!
Вече след като знам и разбирам какво точно се иска от мен, проблеми няма :D
Проблема ми е, че според мен, над 50% от условията на задачите са супер объркани и не се разбира какво точно се иска, дори и при внимателно прочитане! За програмист с опит може и да е ясно, но за хора дето са минали точно 5 урока - едва ли.

Иначе си оправих кода и сега работи. Е, не е най-елегантното решение, но работи :)
Просто още едно въвеждане и още една проверка след като парчетата станат нула.

using System;

namespace Cake
{
    class Program
    {
        static void Main(string[] args)
        {
            int cakeWidth = int.Parse(Console.ReadLine());
            int cakeLength = int.Parse(Console.ReadLine());

            int cakeAllPieces = cakeWidth * cakeLength;
            // int cakeTotalGetPieces = cakeAllPieces;

            int sumGetPieces = 0;

            while (true)
            {
                string piecesOrStop = Console.ReadLine();

                if (piecesOrStop == "STOP")
                {
                    if (sumGetPieces > cakeAllPieces) // >
                    {
                        Console.WriteLine($"No more cake left! You need {sumGetPieces - cakeAllPieces} pieces more.");
                        break;
                    }

                    Console.WriteLine($"{Math.Abs(sumGetPieces - cakeAllPieces)} pieces are left.");
                    break;
                }

                int getPieces = int.Parse(piecesOrStop);
                sumGetPieces += getPieces;

                if (sumGetPieces > cakeAllPieces) // >
                {
                    Console.WriteLine($"No more cake left! You need {sumGetPieces - cakeAllPieces} pieces more.");
                    break;
                }

                else if (sumGetPieces == cakeAllPieces)
                {
                    getPieces = int.Parse(Console.ReadLine());
                    sumGetPieces += getPieces;
                    //Console.WriteLine($"No more cake left! You need {sumGetPieces - cakeAllPieces} pieces more.");
                    //break;
                }
            }
        }
    }
}

 

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