[C#] Arrays - 6 задача


3
6.Write a program that reads two integer numbers N and K and an array of N elements from the console. Find in the array those K elements that have maximal sum.



Отговори



4

от ivaylo.kenov (30760 точки)


8

от ScorpS (1542 точки)


0
и аз използвах Array.Sort() и мисля, че е най-лесно и бързо http://pastebin.com/NguBaykj


0
Колеги условието е да се намери поредицата с най-голяма сума, а не трите най-големи елемента в масива.

от son4etyyy (416 точки)



2

Едит: Преместих решението и обяснението в блога си. Ето линк:

http://goo.gl/qjQ1K
 

 


от Teodor92 (13062 точки)


0
Здравей колега, имаш симпатично решение, но не е ли по-добре да използваш n вместо .Length и така променливата arrayLen губи смисъла си - тя е равна на n?

от son4etyyy (416 точки)

0
Да, така е, направих го единствен с цел да се вижда по-добре че сравнявам с дължината на масива, но сега като се замисля, можех просто да именувам n - arrayLen и да си спестя една променлива. Мерси за забележката :)

от Teodor92 (13062 точки)



0
http://pastebin.com/S7h5b9t4

от B.Jivkov (350 точки)


6
Ето и едно от мен : http://pastebin.com/wGT9xcCV

от son4etyyy (416 точки)


0
Всичко си го бях направил като теб, само не можех да се сетя как точно да изкарам елементите :) Взаимствах ти идеята :)

от karakanovski88 (0 точки)

0
ОК радвам се, че решението ми ти е помогнало :)

от son4etyyy (416 точки)


2
Не виждам в условието да се казва, че елементите са последователни от друга страна, ако не са последователни елементите, защо се търси най-голямата сума, а не се търсят просто най-големите К елемента? Аз съм решил задачата по следния начин: Подреждам най-големите К елемента по низходящ ред в матрица с К елемента (без Array.Sort за по-гадно ;) ) и намирам сумата на елементите в новия масив.
Edit: Решението е направено вече за последователни елементи: намирам най-голямата сума още докато чета числата от конзолата като записвам началото и края на поредицата: http://pastebin.com/nP4ew9cS

от shristoff (747 точки)


0
Принципно, не е казано, че са последователни, но няма смисъл да я решаваме все е едно са непоследователно, защото това се изисква в 16 и 17 задача :)

от Teodor92 (13062 точки)

0
Ето защо тази задача ми се стори прекалено трудна като за номер 6 :)

от shristoff (747 точки)



0

В решението едновременно с вкарването на елементите от масива броя колко елемента съм взела и колко е тяхната сума, като на най-добрата сума запазвам последната позиция, и я ползвам за отпечатване на елементите, които имат максимална сума.

http://pastebin.com/RW1gMKkQ




1
Аз реших, че става въпрос като цяло кои са К елементите, чиято сума е най-голяма и направих сортиране в низходящ ред и изведох първите К елемента на сортирания масив. http://pastebin.com/AXbqWN9b



2

Здравейте!

Понеже днес си загубих доста часове в тази задача да я оптимизирам. Реших да проверя дали наистина работи най-бързо. Позволих си да изтествам всички задачи които сте постнали.

За щастие моята работи най-бързо :)

За статистика - решението на Ивайло Кенов е най-близко до моето -  с 1.5 пъти по-бавно, другите са вече от 2 пъти по-бавни. А за хората който са ползвали или смятат да ползват Array.Sort(), решенията им работят изключително бавно с около 20 пъти по-бавно.

Решението ми - http://pastebin.com/uuN3yKBm

За тези които им е интересно ще споделя какво съм направил:

Пример: n=6      k= 2   int[] = {2,5,7,4,3,3}

Като за начало смятам първите к елемнта в масива (2+5=7) и сумата я запазвам в променлива BiggerSum. След което от сумата изваждам първия елемент (2), след което добавям следващия елемент след първите к (2,5) - добавям (7) и продължавам така до края.

Идеята е, че намалявам сметките. Например ако к=5 ще имаме 4 събирания всеки път като искаме да се преместим надясно. Докато в моя случай ще имаме винаги 1 изваждане и 1 събиране.

Всъщност колкото по големи са ни К и N толкова по-тромава ще става програмата.

 

Поздрави Асси

 


от Assi.NET (3050 точки)


0
но ти по този начин проверяваш елементите последователно, а не застъпваш случай при който най-голямата сума е да речем от елемент 1 + елемент5


0
Според мен подходът не е правилен, защото в задачата се търсят които и да е К на брой числа с максимална сума, а не поредица от К елемента с максимална сума. В твоя код програмата проверява само поредица от К последователни елемента, а не сравнява елемент по елемент кои К от тях ще дадат най-висока сума.



0
http://pastebin.com/06Q35FAN