Loading...
VesselinTonchev avatar VesselinTonchev 5 Точки

Cinema Tickets

Здравейте :)

накратко, правя тази програмка, не гледам решиния и т.н., за да се справям сам. По примерите дава коректен output, само дето в judge ми гърми с времева грешка (явно ми е в повече кодът). Дава ми часовниците. Може ли някой да ми каже къде и какво толкова бъркам? Има ли как да го съкратя кода?


 

using System;

namespace Cinema_Tickets
{
    class Program
    {
        static void Main(string[] args)
        {
            string movie = Console.ReadLine();

            int totalTicket = 0;
            double totalAllMovies = 0;
            double allStandartTickets = 0;
            double allStudentTickets = 0;
            double allKidTickets = 0;
            double kidTotalPercent = 0;
            double studentTotalPercent = 0;
            double standartTotalPercent = 0;

            while (movie != "Finish") 
            {
                int count = 0;
                int totalCount = 0;
                int standartTicketTypeCount = 0;
                int studentTicketTypeCount = 0;
                int kidTicketTypeCount = 0;
                int ticketsPerMovie = 0;

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

                string ticketType = Console.ReadLine();
                //count++;
                while (ticketType != "End" && totalCount > 0)
                {
                    if (count != 0)
                    {
                        ticketType = Console.ReadLine();
                    }
                    switch (ticketType)
                    {
                        case "standart":
                            standartTicketTypeCount++;
                            totalCount--;
                            count++;
                            break;

                        case "student":
                            studentTicketTypeCount++;
                            totalCount--;
                            count++;
                            break;

                        case "kid":
                            kidTicketTypeCount++;
                            totalCount--;
                            count++;
                            break;
                    }
                    ticketsPerMovie = standartTicketTypeCount + studentTicketTypeCount + kidTicketTypeCount;
                    
                }
                totalAllMovies += count;
                totalTicket += count;
                double percentPerMovie = count * 100 / (totalCount + count);
                Console.WriteLine($"{movie} - {percentPerMovie:f2}% full.");
                movie = Console.ReadLine();

                allStandartTickets += standartTicketTypeCount;
                allStudentTickets += studentTicketTypeCount;
                allKidTickets += kidTicketTypeCount;

                standartTotalPercent = allStandartTickets * 100 / totalTicket;
                studentTotalPercent = allStudentTickets * 100 / totalTicket;
                kidTotalPercent = allKidTickets * 100 / totalTicket;

            }
            Console.WriteLine($"Total tickets: {totalTicket}");
            Console.WriteLine($"{studentTotalPercent:f2}% student tickets.");
            Console.WriteLine($"{standartTotalPercent:f2}% standart tickets.");
            Console.WriteLine($"{kidTotalPercent:f2}% kid tickets.");
        }
    }
}

 

0
Programming Basics
svephoto avatar svephoto 1191 Точки

Здравей,

 

Поздравления за самостоятелните опити за решаване на задачи!

 

Кодът може да се съкрати, да. Остави си в началото преди да влзезеш в цикъла само броячите за трите вида билети. След влизане си остави само брояча count и след него прочитането на totalCount. ticketType го остави string.Empty преди да влезеш във втория while, като в него сложи тази проверка: "ticketType != "End" && totalCount > count" и после го завърти. Нямаш нужда от проверката "if (count != 0)". После в switch-a махни totalCount--;. Имаш правописна грешка в единия case, заради която няма да ти проверява за "standard", понеже си го написал с "t" вместо с "d" накрая. След края на всеки филм си направи изчислението за процентите, които са заети по следния начин "double percentPerMovie = count * 1.00 / totalCount * 100;" и си остави печатането така, както е, също и прочитането на следващия филм. Накрая след команда "Finish" вече си излязъл oт първия while-цикъл и ти остава финалното печатане на четирите реда. int променливатa totalTicket може да си я създадеш точно в този момент и в нея си събираш трите брояча за трите типа билети. На първия ред печаташ съобщението за "Total tickets: {totalTicket}", а на следващите три - другите съобщения, като директно в тях можеш да направиш нужните калкулации по следния пример:

 

Console.WriteLine($"{allStudentTickets * 1.00 / totalTickets * 100:F2}% student tickets.");

 

Обърни внимание отново на точното изписване на текстовете, понеже и тук имаш грешки: на 3-тия и 4-тия ред трябва пише съответно "standard" и "kids" в изреченията, а при теб е "standart" и "kid". Тестовете в Judge хващат дори и един сгрешен/липсващ знак при печатането, и съответно дават по-малко точки.

Успех ти желая и ако пак не се получават нещата, пиши, за да помагаме отново.

0
17/11/2019 12:43:15
VesselinTonchev avatar VesselinTonchev 5 Точки

Супер сте, много Благодаря! Тази правописна грешка ми изяждаше програмта. Относно редуцирането на кода, ще седна денс след упражненията да видя, според препоръките Ви, как во мога да направя.

0
svephoto avatar svephoto 1191 Точки

Моля!

Много добре, надявам се да се получи, успех.

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