Loading...
Yavor2012 avatar Yavor2012 15 Точки

[Exam Problems] C# Basics - 14.04.2014 Morning - {2} Biggest Triple - Насоки за решаване?

Здравейте колеги,

Мъча се да реша тази задача и нещо не ми хрумват много адекватни идеи и затова трших да се обърна към вас. Питането ми е следното: какъв според ввас е най-добрия начин да се раздели линията на от числа на тройки. Мислех за substring(), но при условие , че броя на цифрите е променлив не ми се връзва. Нещо не мога грам да отлепя и затова реших да ви питам за насоки. Моля само да ми кажете някакъв начин или място от което да прочета, защото решението и сам го виждам, но искам да хвана как се стига до него. Задачата е "Biggest Tripple" от изпита C# Basics от 14.04.2014г. сутринта.Благодаря ви предварително за отделеното време!

 

Поздрави!

Тагове:
1
Programming Basics 30/03/2015 11:36:19
KatyaMarincheva avatar KatyaMarincheva 572 Точки
Best Answer

Здравей Яворе,

колегите са прави, че substring не е удобно да се използва, тъй като първо трябва да превърнем редът от числа прочетени от конзолата в int[] или List<int> (аз предпочетох List<int>).

Но subset може да се използва по-нататък.

В този ред:

        // read, split and parse input line, store in a list of unrestricted count
        List<int> numbers = Console.ReadLine().Split(' ').Select(int.Parse).ToList();

        // temp list will be storing every slice of 3 numbers, temporarily, until we calculate their sum and compare it to maxSum
        List<int> temp = new List<int>();

        temp = numbers.Take(3).ToList(); // taking the first 3 elements of the numbers list
        numbers.RemoveRange(0, 3); // removing the first 3 elements of the numbers list

и т.н.

Целият код: http://pastebin.com/DmeJZrax

Честно казано искаше ми се да взема последните 1 или 2 елемента от изходния List или array без да се налага да прилагам RemoveRange(0, 3), да намеря нещо аналогично на това:

Substring(int startIndex)
(Retrieves a substring from this instance. The substring starts at a specified character position and continues to the end of the string.)

- само че да е за subsets.

Но не открих нищо аналогично - ако някой се сети - ще съм благодарна да ми каже :)

6
21/03/2015 07:48:05
Samuil.Petrow avatar Samuil.Petrow 1550 Точки

Хващаш линията и използваш .Split с параметър ' ' (интервал), което ще ти върне масив с числата като стрингове. Оттам вече ще прецениш дали и по какъв начин ще ги комбинираш по тройки :)

1
20/03/2015 12:23:10
a_tifonoff avatar a_tifonoff 26 Точки

Погледни това http://pastebin.com/scPLAjS3 . И аз сега я пробвах. Може би не е най-ефективното, но работи. Идеята е да разделиш стринга по тройки и да сравняваш сумата от числата на всята тройка като не е необходимо да запомняш стойнаостта на максималната тройка, а индекса на последния и член. И ако има числа извън комплектите от тройки да сравниш тяхната сума с максималната тройка. Ако тази сума е по-голяма от максималната тройка, последния индекс автоматично се приема за макс. След това печат.

1
Yavor2012 avatar Yavor2012 15 Точки

Благодаря на всички за решенията и насоките :) !

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Бях задала въпрос в тази тема, на който най-после намерих отговор:

въпрос:

"Честно казано искаше ми се да взема последните 1 или 2 елемента от изходния List или array без да се налага да прилагам RemoveRange(0, 3), да намеря нещо аналогично на това: Substring(int startIndex), само че да е за subsets."

отговор:

При List може да се използва:

        List<int> temp = new List<int>();
        List<int> final = new List<int>();

        for (int i = 0; i < numbers.Count; i +=3)
        {
            temp = numbers.Skip(i).Take(3).ToList();
            sum = temp.Sum();

            if (sum > maxSum)
            {
                maxSum = sum;
                final = temp;
            }
        }

Първо, точно като при substring указваме точно откъде да започне дадения subset;

и второ, когато работим с List subset, и кажем на метода Take() да вземе 3 елемента, а са останали само 1 или 2, List-a с резултата взема и после отпечатва точно толкова елементи колкото са налични, 1 или 2 (array subset би оставил и отпечатал нули на местата липсващите 1 или 2 елемента).

Цялото решение - далеч по-кратко от предишното.

 

 

4
EBojilova avatar EBojilova 330 Точки

И аз се пробвах да реша тази задача и с листове и с масиви.

Рових доста из stackoverflow и се оказа, че задачата може да се реши на 4 реда с Linq.

Ето го и кода, на който му е интересно. Дава 100 точки:

https://gist.github.com/EBojilova/887be14de62a6cfc5e31 

1
a1mbiser avatar a1mbiser 63 Точки

Здравейте ето едно решение и от мен(не бях попадал на тази тема и като я видях си спомних за своите перипетии с тази задачка).Решението е доста подобно  на това на колегата a_tifonoff . Поздрави.

0
02/05/2015 14:57:49
anna.ilieva avatar anna.ilieva 6 Точки

Здравей Явор, може ли да напишеш условието на задачата? 

 

Поздрави,

0
ThePSXHive avatar ThePSXHive 436 Точки

Преди да напишеш мнение в дадена тема, обърни внимание на датата от която е темата, защото така вече 3 теми са били "съживени" макар че авторът отдавна е разрешил проблемът.

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