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

Проблем със задача "Cake" от Упражненията на While Loop - 5та Задача.

Здравейте, имам проблем със задачата като в Джъджа ми дава 92/100, а не виждам каква е причината. Ако някой има възможност да каже какво изпускам. Ето кода:

 class Program
    {
        static void Main(string[] args)
        {
            int width = int.Parse(Console.ReadLine());
            int length = int.Parse(Console.ReadLine());

            int cakePieces = (width * length);
            int eatenPieces = 0;
            int sumEatenPieces = 0;
            int neededPieces = 0;
            int leftPieces = 0;

            while (cakePieces > 0)
            {
                string Pieces = Console.ReadLine();

                if (Pieces != "STOP")
                {
                    eatenPieces = int.Parse(Pieces);
                    sumEatenPieces += eatenPieces;
                    leftPieces = cakePieces - sumEatenPieces;

                }
                if (sumEatenPieces > cakePieces)
                {
                    neededPieces = sumEatenPieces - cakePieces;
                    Console.WriteLine($"No more cake left! You need {neededPieces} pieces more.");
                    break;
                }
                if (Pieces == "STOP" || cakePieces == sumEatenPieces)
                {
                    Console.WriteLine($"{leftPieces} pieces are left.");
                    break;
                }
            }

        }

    }
}

Тагове:
0
Programming Basics with C#
DimitarVlaev avatar DimitarVlaev 91 Точки
Best Answer

Здравей колега,

Изглежда отговорът на въпроса ти (а оттук и 100-те % в Джъдж) се съдържа във формулировката на това, което трябва да се отпечата на конзолата:

  • "{брой парчета} pieces are left." - ако стигнете до STOP и не са свършили парчетата торта;

В твоя код, последната if проверка: 

  • if (Pieces == "STOP" || sumEatenPieces == cakePieces)

изкарва същият резултат на конзолата и в случая, когато парчетата са свършили sumEatenPieces == cakePieces.

За да избегнеш това, би било достатъчно или да махнеш изцяло sumEatenPieces == cakePieces или да го преработиш в нещо от сорта на:

  • if (Pieces == "STOP" && !(sumEatenPieces == cakePieces))

Успех!

0
peter.trifonoff avatar peter.trifonoff 120 Точки

Пробвай да правиш входа да е винаги с главни букви, нещо такова: string Pieces = Console.ReadLine().ToUpper();

0
chrisi2712 avatar chrisi2712 272 Точки

Моето решение е по-различно, може да разгледате и него, за да видите какво пропускате

 

using System;

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

            int areaCake = wight * lenght;
            int areaOnePiece = 1;
            int areaAllPieces = 0;
            int counterPieces = 0;
            int pieces = 0;
            bool areThereEnoughPieces = true;

            string input = Console.ReadLine();

            while(input!="STOP")
            {
                pieces = int.Parse(input);
                counterPieces += pieces;
                areaAllPieces = counterPieces * areaOnePiece;

                if(areaCake<areaAllPieces)
                {
                    int neededPieces = areaAllPieces - areaCake;
                    Console.WriteLine($"No more cake left! You need {neededPieces} pieces more.");
                    areThereEnoughPieces = false;
                    break;
                }

                input = Console.ReadLine();
            }

            if (areThereEnoughPieces==true)
            {
                int leftOver = areaCake - areaAllPieces;
                Console.WriteLine($"{leftOver} pieces are left.");
            }

        }
    }
}

0
NikolayTsolov avatar NikolayTsolov 2 Точки

Преработих го без  sumEatenPieces == cakePieces по предложението на колегата DimitarVlaev и се оправи. Както казва народната мъдрост "Малките камъни преобръщат колата". Благодаря за съветите!

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