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

Изпит по "Основи на програмирането" 6 и 7 юли 2019 Задача 5. Магазин за компютърни игри

Здравейте колеги , може ли решение на задачата: Започнах с това решение, но очевадно изобщо не се решава така:

Условие:

Магазин за компютърни игри ви наема за да направите статистика на процента продажби на игрите от последния месец, като изчислите по колко процента от общите продажби са за някоя от игрите.

Процентите трябва да бъдат разделени на четири части, три заглавия на игри и всички останали :

1.Hearthstone

2.Fornite

3.Overwatch

4.Others

Вход

От конзолата се четат:

  • Брой продадени игри- n - цяло положително число в интервала [1… 100]

За следващите n реда се чете по един ред:

  • на игра - текст

Изход

На конзолата да се изпишат четири реда:

                "Hearthstone - {процент продажби на Hearthstone}%"

      "Fornite - {процент продажби на Fornite}%"

      "Overwatch - {процент продажби на Overwatch}%"

      "Others - {процент продажби на всички останали игри}%"

Резултатът да бъде закръглен до втората цифра след десетичния знак.

Примерен вход и изход

Вход

Изход

Обяснения

4

Hearthstone

Fornite

Overwatch

Counter-Strike

Hearthstone - 25.00%

Fornite - 25.00%

Overwatch - 25.00%

Others - 25.00%

Продадени са  4 игри.

По една игра Hearthstone, Fornite и Overwatch, които принадлежат към съответните им категории,

както и една игра Counter-Strike, която спада към допълнителната категория.

 

3

Hearthstone

Diablo 2

Star Craft 2

Hearthstone - 33.33%

Fornite - 0.00%

Overwatch - 0.00%

Others - 66.67%

Продадени са 3 игри.

Една игра от категорията Hearthstone. Както и 2 игри Diablo 2 и Star Craft 2

 

Код:

using System;

namespace _05._PC_Game_Shop
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            double percent = 100 / n;
         
            for (int i = 0; i < n; i++)
            {
                string game = Console.ReadLine();
               
                if (game == "Hearthstone")
                {
                    double percent1 = percent / 3;
                    if (game != "Hearthstone")
                    {
                        percent = 0.00;
                    }
                }
                else if (game == "Fornite")
                {
                    double percent2 = percent / 3;
                    if (game != "Fornite")
                    {
                        percent = 0.00;
                    }                 
                }
                else if (game == "Overwatch")
                {
                    double percent3 = percent / 3;
                    if (game != "Overwatch")
                    {
                        percent = 0.00;
                    }
                }             

                if (game != "Hearthstone" && game != "Fornite" && game != "Overwatch")
                {
                    double percentOther = 100 - percent;      
                }
            }

            Console.WriteLine($"Hearthstone - {percent}%");
            Console.WriteLine($"Fornite - {percent}%");
            Console.WriteLine($"Overwatch - {percent}%");
            Console.WriteLine($"Others - {percent}%");
        }
    }
}

 

Благодаря Предварително !

Тагове:
0
Programming Basics
svetoslav_0 avatar svetoslav_0 1009 Точки
Best Answer

Здравей! 

Мога да ти дам съвет как да решиш задачата вместо самото решение, мисля, че така би било по-градивно. Ето какво бих направил аз:

След като си прочетеш броя продадени игри (променливата n), завърташ един цикъл n на брой пъти (което ти всъщност го имаш). На всяко едно завъртане на този цикъл четеш каква е текущата игра и правиш няколко проверки. До тук май няма разлика. Това, което можеш да направиш е да оставиш процентите за накрая. Остави цикъла само да брои различните видови игри. Какво имам предвид: можеш да си дефинираш 4 променливи (по една от всеки тип игра) и да ги наименоваш например така: hearthstoneCount, forniteCount и т.н. Когато правиш проверките в цикъла, вместо да смяташ процентите, просто виж коя е текущата игра и ѝ вдигни променливата брояч е едно. Например:

if (game == "Fornite") {
    forniteCount++;
}

Когато приключи изпълнението на цикъла, ще имаш бройките на всяка купена игра. Ще се знае, че от първи тип има купена 1 бройка, от втория 4 бройки и т.н. Чак тогава вече можеш да сметнеш процентите на всеки тип. Например: от даден тип има закупени 4 бройки, общо всички са 10. За да поличиш процентното съотношение -> (4 / 10) * 100.  И така за всеки тип.

Надявам се тези насоки да са били полезни. Опитът ми показва, че това е по-градивният начин. Ако все пак не можеш да се оправиш, напиши ми един коментар и ще ти покажа цялото решение :)

0
Deni95 avatar Deni95 2 Точки

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

Ето така го направих : 100 / 100

using System;

namespace _05._PC_Game_Shop
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
           
            double gameH = 0.00;
            double gameF = 0.0;
            double gameO = 0.00;
            double otherGame = 0.00;
                    
            for (int i = 0; i < n; i++)
            {
                string game = Console.ReadLine();
               
                if (game == "Hearthstone")  // 3
                {
                    gameH++;    
                   
                }
                else if (game == "Fornite") // 2
                {
                    gameF++;           
                }
                else if (game == "Overwatch")
                {
                    gameO++;
                }
                else
                {
                    otherGame++;
                }
            }
            double percentPerGame = 100 / (n * 1.0 );        
            double H = gameH * percentPerGame;
            double F = gameF * percentPerGame;
            double O = gameO * percentPerGame;
            double other = otherGame * percentPerGame;
        

            Console.WriteLine($"Hearthstone - {H:F2}%");
            Console.WriteLine($"Fornite - {F:F2}%");
            Console.WriteLine($"Overwatch - {O:F2}%");
            Console.WriteLine($"Others - {other:F2}%");
        }
    }
}

 

0
plamenpik avatar plamenpik 31 Точки

В началото много добре си се сетил да сметнеш колно е процента за броят игри които са продадени със 

double percent = 100 / n;

Просто е трябвало да направиш 4 променливи за 3-те известни игри и всики останали примерно 

double hearthstonePercentage = 0.0;

и във всяка итерация на цикъла след проверка коя е играта да добавяш процента към отделните променливи. А във твоят фор цикълк съсвсем си се оплел първо проверяваш дали играта е хартстоун съсздаваш променлива

double percent1 = percent / 3;

която никъде не ползваш после проверяваш дали играта не е хартстоун което винаги е false и зануляваш процентите, накраят смяташ процентите за останалите игри което пак никъде не посзваш

double percentOther = 100 - percent;

и принтираш процента който смяташ в началото който дава правилен резултат при прървият нулев тест ако форматираш да се принтират два знака след десетичната запетая по този начин

Console.WriteLine($"Hearthstone - {percent:F2}%");

Изтрий всичко почни от начало и смятам че ще я решеш.

0
Deni95 avatar Deni95 2 Точки

Много благодаря за съветите получи се :))

0
plamenpik avatar plamenpik 31 Точки

Видах по горе че си я решил/а, ето и решение с моят вариант ако ти е интересно да го разгледаш обще взето е същото но леко по кратко.

using System;

class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        double hearthstonePercentage = 0.0;
        double fornitePercentage = 0.0;
        double overwatchPercentage = 0.0;
        double otherPercentage = 0.0;
        double percent = 100.0 / n;

        for (int i = 0; i < n; i++)
        {
            string game = Console.ReadLine().ToLower();

            switch (game)
            {
                case "hearthstone":
                    hearthstonePercentage += percent;
                    break;
                case "fornite":
                    fornitePercentage += percent;
                    break;
                case "overwatch":
                    overwatchPercentage += percent;
                    break;
                default:
                    otherPercentage += percent;
                    break;
            }
        }

        Console.WriteLine($"Hearthstone - {hearthstonePercentage:F2}%");
        Console.WriteLine($"Fornite - {fornitePercentage:F2}%");
        Console.WriteLine($"Overwatch - {overwatchPercentage:F2}%");
        Console.WriteLine($"Others - {otherPercentage:F2}%");
    }
}

 

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