Питане за 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]);
        }
    }
}
И аз мислех за Dictionary, но тъй като не съм го упражнявала достатъчно реших да попитам ментор по време на изпита - той ми отговори, че дори е препоръчително да НЕ използваме Dictionary, а да намерим друга логика - щеше да е лесно ако го нямаше разделението на четни и нечетни ст-ти от ASCII таблицата, а именно просто връщаш сумата като string. Аз използвах 2 List-a (names и score) и някак я докарах до 70, но сложих сумата в един List и с list.Max(); изкарах максималните ст-ти. Това е добър начин и за някои други задачи, в които не знаеш колко променливи да сравняваш.
Аз реших, че казват "не" използвайте Dictionary ;)
Като за втора задача има различни варианти за решаване. dimo.ivanov, сега видях твоето решение и се убеждавам, че Dictionary-то си е много подходящо в случая.
За мен няма смисъл нито от Dictionary нито от всякакви други колекции, щом в задачата накрая се иска да принтираш един елемент, значи просто няма нужда да запазваме всички елементи. Имаме нужда от 2 променливи, които ни пазят maxScore и playerName. Ето моето решение, без колекции (като изключим string-a разбира се ) http://pastebin.com/6uNjPZ64
Общо взето кой както го кефи. Единият вариант заема памет, другият - процесор. Минало... ;)