Loading...
sotirova.yulia avatar sotirova.yulia 7 Точки

Programming Basics Online Exam - 15 and 16 June 2019, 06. Favorite Movie

Здравейте, колеги. От известно време си блъскам главата с тази задача, знам че решението ми е доста завъртяно и със сигурност има по-простичко решение. Въпроса е че на "output" ми излиза 1 точка разлика с вярното решение и не мога да разбера защо. Ще съм благодарна ако някой ми обясни. Ето го условието.

 

Задача 6. Любим филм

Петък вечер е и се чудите кой филм да си пуснете да гледате. Решавате да напишете програма, която да избере това вместо вас. До команда "STOP" получавате заглавия на любими ваши филми. Най-добрият филм за вас ще бъде този, който има най-много точки. Точките се изчисляват като сбор от ASCII стойностите на символите в заглавието на филма. (няма да има случай, в който имаме два филма с равен брой точки)

При изчислението на точките трябва да се има предвид следното:

  • За всяка малка буква в заглавието, от сумата трябва да се извади два пъти дължината на заглавието на филма.
  • За всяка главна буква в заглавието, от сумата трябва да се извади дължината на заглавието на филма.

Може да имате максимум 7 заглавия на филми.

Вход

От конзолата се четат редове до команда "STOP" или до достигането на лимита от 7 филма:

  • Заглавие на филм  – текст;

Изход

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

  • Ако сте достигнали лимита от 7 филма трябва да отпечатате:

"The limit is reached."

Да се отпечата най-добрият филм за вас:

"The best movie for you is {заглавие на филм} with {сума на символите} ASCII sum."

 

 

 

И ето моето решение:

https://pastebin.com/QD2kDUuV

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

Super code, only one small mistake when calculating the value of a symbol that is not A-Z or a-z.

;-)

using System;

namespace MyApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string command = "";
            string movieName = "";
            string bestMovie = "";
            int points = 0;
            int currentPoints = 0;
            int movieCounter = 0;
            int minusPoints = 0;
            int bestPoints = 0;

            while (command != "STOP")
            {
                command = Console.ReadLine();

                if (command == "STOP")
                {
                    break;
                }

                movieName = command;

                movieCounter++;

                if (movieCounter == 7)
                {
                    break;
                }

                minusPoints = movieName.Length;

                char currentLetter = ' ';

                // ???
                //for (int j = 0; j < movieName.Length; j++)
                //{
                //    char letter = movieName[j];
                //    currentLetter = letter;
                //    currentPoints = currentLetter;

                //    if (currentLetter == 32)
                //    {
                //        minusPoints -= 1;
                //    }
                //}

                for (int i = 0; i < movieName.Length; i++)
                {
                    char letter = movieName[i];
                    currentLetter = letter;
                    currentPoints = currentLetter;

                    // За всяка главна буква в заглавието, от сумата трябва да се извади
                    // дължината на заглавието на филма.
                    if (currentPoints >= 65 && currentPoints <= 90)
                    {
                        currentPoints -= minusPoints;
                    }
                    // За всяка малка буква в заглавието, от сумата трябва да се извади два
                    // пъти дължината на заглавието на филма.
                    else if (currentLetter >= 97 && currentLetter <= 122)
                    {
                        currentPoints -= minusPoints * 2;
                    }

                    // All other cases except A-Z and a-z (*&^%$#...),
                    // as well as empty spaces which has ASCII value of 32
                    points += currentPoints;
                }

                if (points > bestPoints)
                {
                    bestMovie = movieName;
                    bestPoints = points;
                }

                points = 0;
                minusPoints = 0;
            }

            if (movieCounter == 7)
            {
                Console.WriteLine("The limit is reached.");
            }

            Console.WriteLine($"The best movie for you is {bestMovie} with {bestPoints} ASCII sum.");
        }
    }
}

 

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