Софтуерно Инженерство
Loading...
+ Нов въпрос
gogbog avatar gogbog 12 Точки

Проблем със задача 07. Population Counter от раздел Exercises: Dictionaries, Lambda and LINQ

Така ето го кодчето:

 

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

namespace _7.Population_Counter
{
    class Program
    {
        static void Main(string[] args)
        {
            var countries = new Dictionary<string, List<string>>();
            var cityData = new Dictionary<string, int>();
            var countryTotalPopulation = new Dictionary<string, int>();

            while (true)
            {
                var inputedInfo = Console.ReadLine()
                    .Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries)
                    .ToArray();

                if (inputedInfo[0] == "report")
                {
                    //call method or break your life your choise
                    break;
                }

                var city = inputedInfo[0];
                var country = inputedInfo[1];
                var cityPopulation = int.Parse(inputedInfo[2]);

                

                if (!countries.ContainsKey(country))
                {
                    countries.Add(country, new List<string>());
                }

                if (!cityData.ContainsKey(city))
                {
                    cityData.Add(city, 0);
                }

                if (!countryTotalPopulation.ContainsKey(country))
                {
                    countryTotalPopulation.Add(country, 0);
                }

                countryTotalPopulation[country] += cityPopulation; // total population of country
                countries[country].Add(city); //index country value city in list
                cityData[city] += cityPopulation; //index city value population
            }

            var countryTotalPopList = countryTotalPopulation.OrderByDescending(key => key.Value).ToList();
            


            foreach (var item in countryTotalPopList)
            {
                var country = item.Key;
                var countryPopulation = item.Value;

                Console.WriteLine($"{country} (total population: {countryPopulation})");
                var cityDataList = cityData.OrderByDescending(key => key.Value).ToList();

                foreach (var allCitiesCity in cityDataList)
                {
                    var citiesCity = allCitiesCity.Key;
                    foreach (var city in countries[country])
                    {
                        if (city == citiesCity)
                        {
                            Console.WriteLine($"=>{city}: {allCitiesCity.Value}");
                        }
                    }
                }
                
            }


        }
    }
}
 

Със примерните задачи се справих обаче judge-а ми дава 30/100 и не ми позволява да видя къде съм сгрешил. Ако някой може да ми помогне или да ми каже по-добър начин за решаването на тази задача ще му бъда благодарен :).
Тагове:
0
Technology Fundamentals
kaloyannikov avatar kaloyannikov 528 Точки
Best Answer
  • The population count of each city will be an integer in the range [0 … 2 000 000 000].

2 000 000 000 + 2 000 000 000 минаваш int границата . 

И за толкова дълъг код ползвай pastebin или някой друг сайт за share-ване на code.

1
gogbog avatar gogbog 12 Точки

Мерси за съвета вече ще го използвам и точно това ми беше грешката. Благодаря :)

0
warglaivee avatar warglaivee 59 Точки

Здравей, аз тръгнах по по-кратно решение, което не успях да завърша и погледнах видеото https://youtu.be/Dxvb-gh8U8E?t=8036

Което би било доста полезно за изпита, защото ми се вижда по-просто(логично) и бързо(по-малко код)

https://github.com/Warglaive/TechModuleSeptember2017/blob/master/Dictionaries%2C%20Lambda%20and%20LINQ%20-%20Exercises/07.%20Population%20Counter/07.%20Population%20Counter.cs

0