Loading...
PETKOVAMPP avatar PETKOVAMPP 0 Точки

C# - Problems for Champions - Part II - 01. Passion Days, 2 грешки от Judge системата - Memory limit

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

Бихти ли ми помогнали с моя код за тази задача. Вече няколко теста направих и винаги имам 80% успеваемост.

Благодаря предварително за отделеното време.
 

С поздрав,

Мариана Петкова

Ето го и кода:

using System;
using System.Diagnostics.CodeAnalysis;
using System.Text;

namespace ShoppingNS
{
    public class Shopping
    {
        public static void Main()
        {
            decimal shoppingMoney;
            int numberRows = 0;
            do
            {
                try
                {
                    shoppingMoney = decimal.Parse(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Incorect format for money or money are zero or negative.");
                    shoppingMoney = 0;
                }
            } while (shoppingMoney <= 0);

                   
            string command = Console.ReadLine();
            while (command != "mall.Enter")
            {
                command = Console.ReadLine();
            }

            int purchases = 0;
            decimal price = 0;

            command = Console.ReadLine();
            numberRows = 1;
 
            while (command != "mall.Exit" && numberRows <= 20)
            {
                if (command.Length > 20)
                {
                    command = command.Substring(0, 20);
                }

                foreach(char action in command)
                {
                    if (action >= 'A' && action <= 'Z')
                    {
                        // Console.WriteLine("ASCII Cap: " + (int)action);
                        price = action * 0.5m;
                        if (shoppingMoney < price)
                        {
                            continue;
                        }
                        shoppingMoney -= price;
                        purchases++;
                    } else if (action >= 'a' && action <= 'z')
                    {
                        // Console.WriteLine("ASCII Small: " + (int)action);
                        price = action * 0.3m;
                        if (shoppingMoney < price)
                        {
                            continue;
                        }
                        shoppingMoney -= price;
                        purchases++;
                    } else if (action == '%')
                    {
                        // Console.WriteLine("ASCII %: " + (int)action);
                        if (shoppingMoney > 0)
                        {
                            price = shoppingMoney / 2.0m;
                            shoppingMoney -= price;
                            purchases++;
                        }
                    } else if (action == '*')
                    {
                        // Console.WriteLine("ASCII *: " + (int)action);
                        shoppingMoney += 10m;
                    } else

                       {
                        // Console.WriteLine("ASCII other: " + (int)action);
                        price = action;
                        if (shoppingMoney < price)
                        {
                            continue;
                        }
                        shoppingMoney -= price;
                        purchases++;
                    }
                } // while foreach
                               
                command = Console.ReadLine();
                numberRows++;

            } // while mall.Exit

            if (purchases == 0)
                Console.WriteLine("No purchases. Money left: {0:0.00} lv.", shoppingMoney);
            else
                Console.WriteLine("{0} purchases. Money left: {1:0.00} lv.", purchases, shoppingMoney);
        }
    }
}

Тагове:
0
Programming Basics
dimitarglavianov avatar dimitarglavianov 111 Точки

Здравей, 

В заданието има условия едни от тях са:

  • Позволено време за изпълнение: 0.1 секунди.
  • Позволена памет: 16 MB

В твоя код имаш проверка дали командата е по-дълга от 20 символа което не го видях в условието, също и try catch блока в началото май е излишен. С тях Judge с-мата дава 80/100 и използвана памет ~17.4 MB и време ~0.2s

Когато ги премахнах даде 100/100 с ~11 MB  и време ~ 0.09s :

using System;

namespace ShoppingNS
{
    public class Shopping
    {
        public static void Main()
        {
            decimal shoppingMoney = decimal.Parse(Console.ReadLine());
            string command = Console.ReadLine();
            while (command != "mall.Enter")
            {
                command = Console.ReadLine();
            }

            int purchases = 0;
            command = Console.ReadLine();
            while (command != "mall.Exit")
            {
                foreach (char action in command)
                {
                    decimal price = 0;
                    if (action >= 'A' && action <= 'Z')
                    {
                        // Console.WriteLine("ASCII Cap: " + (int)action);
                        price = action * 0.5m;
                        if (shoppingMoney < price)
                        {
                            continue;
                        }
                        shoppingMoney -= price;
                        purchases++;
                    }
                    else if (action >= 'a' && action <= 'z')
                    {
                        // Console.WriteLine("ASCII Small: " + (int)action);
                        price = action * 0.3m;
                        if (shoppingMoney < price)
                        {
                            continue;
                        }
                        shoppingMoney -= price;
                        purchases++;
                    }
                    else if (action == '%')
                    {
                        // Console.WriteLine("ASCII %: " + (int)action);
                        if (shoppingMoney > 0)
                        {
                            price = shoppingMoney / 2.0m;
                            shoppingMoney -= price;
                            purchases++;
                        }
                    }
                    else if (action == '*')
                    {
                        // Console.WriteLine("ASCII *: " + (int)action);
                        shoppingMoney += 10m;
                    }
                    else
                    {
                        // Console.WriteLine("ASCII other: " + (int)action);
                        price = action;
                        if (shoppingMoney < price)
                        {
                            continue;
                        }
                        shoppingMoney -= price;
                        purchases++;
                    }
                } // while foreach

                command = Console.ReadLine(); // while mall.Exit
            }

            if (purchases == 0)
                Console.WriteLine("No purchases. Money left: {0:0.00} lv.", shoppingMoney);
            else
                Console.WriteLine("{0} purchases. Money left: {1:0.00} lv.", purchases, shoppingMoney);
        }
    }
}

Успех 🙂

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