Loading...
Stefan77 avatar Stefan77 1 Точки

Питане за 2-ра задача от изпита Basically днес. Честита Цветница! Поздравления на всички с MAX

Здравейте,Честита Цветница!  Поздравления на всички изкарали 500 точки днес! Не съм между тях,единствено 2-ра задача ми се опъна (уж лесна),при нея достигнах само 50 точки. Макар и късно искам да разбера грешката си.:)  Ето кода:

using System;
using System.Collections.Generic;

namespace _2_Game_of_names
{
    class Program
    {
        static void Main()
        {//INPUT:
            int countplrs = int.Parse(Console.ReadLine());
            string[] players = new string[countplr];      
           // BigInteger[] scorePlayer = new BigInteger[countplrs];

           int[] scorePlayer=new int[countplrs];

            for (int i = 0; i < countplrs; i++)
            {
                 string name = Console.ReadLine();  
              //  BigInteger sumscore = BigInteger.Parse(Console.ReadLine());

                 int sumscore=int.Parse(Console.ReadLine());
                for (int letter = 0; letter < name.Length; letter++)
                {
                    int charnmbr = name[letter];
                    if (charnmbr % 2 == 0)
                    {
                        sumscore += charnmbr;
                    }
                    else {
                        sumscore -= charnmbr;
                    }
                }
                scorePlayer[i] = sumscore;
                players[i] = name;
            }

            //find winner
            int indexwinnner = 0;
            for (int i = 1; i < countplrs; i++)
            {
                if (scorePlayer[i -1] < scorePlayer[i])
                    indexwinnner = i;                

            }
         //OUTPUT:   
         Console.WriteLine("The winner is {0} - {1} points"
                  , players[indexwinnner], scorePlayer[indexwinnner]);
        }
    }
}

Тагове:
-2
Programming Basics
dimo.ivanov avatar dimo.ivanov 35 Точки

Ето и един вариант за решение с Dictionary... може би малко по-кратък като код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _02
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            var scores = new Dictionary<int, string>();

            for (int i = 0; i < n; i++)
            {
                string name = Console.ReadLine();
                int Sum = int.Parse(Console.ReadLine());
                for (int j = 0; j < name.Length; j++)
                {
                    if (name[j] % 2 == 0)
                    {
                        Sum += name[j];
                    }
                    else
                    {
                        Sum -= name[j];
                    }
                }
                if (!scores.ContainsKey(Sum))
                {
                    scores[Sum] = name;
                }
            }

            Console.WriteLine($"The winner is {scores[scores.Keys.Max()]} - {scores.Keys.Max()} points");
        }
    }
}

 

0
InaPanova avatar InaPanova 28 Точки

И аз мислех за Dictionary, но тъй като не съм го упражнявала достатъчно реших да попитам ментор по време на изпита - той ми отговори, че дори е препоръчително да НЕ използваме Dictionary, а да намерим друга логика - щеше да е лесно ако го нямаше разделението на четни и нечетни ст-ти от ASCII таблицата, а именно просто връщаш сумата като string. Аз използвах 2 List-a (names и score) и някак я докарах до 70, но сложих сумата в един List и с list.Max(); изкарах максималните ст-ти. Това е добър начин и за някои други задачи, в които не знаеш колко променливи да сравняваш. 

2
dimo.ivanov avatar dimo.ivanov 35 Точки

Аз реших, че казват "не" използвайте Dictionary ;)

0
InaPanova avatar InaPanova 28 Точки

Като за втора задача има различни варианти за решаване. dimo.ivanov, сега видях твоето решение и се убеждавам, че Dictionary-то си е много подходящо в случая. 

1
NikolayRogchev avatar NikolayRogchev 12 Точки

За мен няма смисъл нито от Dictionary нито от всякакви други колекции, щом в задачата накрая се иска да принтираш един елемент, значи просто няма нужда да запазваме всички елементи. Имаме нужда от 2 променливи, които ни пазят maxScore и playerName. Ето моето решение, без колекции (като изключим string-a разбира се ) http://pastebin.com/6uNjPZ64

0
dimo.ivanov avatar dimo.ivanov 35 Точки

Общо взето кой както го кефи. Единият вариант заема памет, другият - процесор. Минало... ;)

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