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


2
10.Write a program that finds in given array of integers a sequence of given sum S (if present).
Example:  {4, 3, 1, 4, 2, 5, 8}, S=11 -> {4, 2, 5} 



Отговори



1

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


0
Колега, така не ти ли изписва последния WriteLine всеки път? Дори и да си намерил поредица.

от vphilipov (3591 точки)

0
Ами не, защото като намери поредица слагам return и програмата свършва.

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


3

http://pastebin.com/imJvKTpH

Обяснение

Аз се опитах да я направя с 1 цикъл, за да няма повторение с други решения. Прави същото каквото и с 2, просто упражнявам мозъка.

Алгоритъма ми е следния:

1) В цикъла на променливата currentSum добавям стойността на текущия елемент.

2) Проверявам дали сме стигнали желата сума и ако е така, вземаме позицията на първия и последния елемент и брейкваме.

3) Ако сме стигнали края на масива, присвояваме на променливата currentSum 0, защото започваме от начало. А startElement го увеличаваме с 1.

4) Проверяваме дали и startElement не е стигнал края на масива. Ако не е цикъла ни започва да се върти от startElement.

Забележка: Решението прави същото каквото и 2 цикъла. Просто се опитвам да мисля малко по-различни неща от очевидните.


от kirov (4821 точки)


0
А, ако няма поредица от елементи, чиито сбор да е равен на дадената сума?

от sabrie_n (625 точки)

0
Ако няма, ми е грешна задачата. Сега като се замисля на доста задачи съм изтървал този случай. По принцип, ако трябва да проверяваме за това, за сега пише в условието, но е хубаво от рано да се учим да мислим за неправилен вход и гранични случаи. Благодаря за поправката. :)

от kirov (4821 точки)



1
http://pastebin.com/TCJR4Zz7

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


6
http://pastebin.com/tBvwrXyq
Ето едно по-пълно решение, което показва всички комбинации от поредни елементи със сума S (дори да е само един елемент) и казва колко броя комбинации е намерило. Нещо, което не видях в показаните решения. Има и обяснителни коментари.

от shristoff (747 точки)


0
Това решение ми харесва изключително много именно заради допълнението да извежда колко броя правилни комбинации има. Тествах го с int[] Arr = { 4, 3, 1, 4, 12, 5, 8 }; и S = 17. Тук има 2 комбинации: 1, 4, 12 и 12, 5. Изходът ги разделя като отделни решения. Супер. Единствено странно ми е именуването с главна начална буква на променливата NumOfSums и масива Arr... нали не била добра практика при именуване на променливи :)

от DIMITAR_GOSHEV (0 точки)

0
Тогава още не бях съвсем наясно с имената, че с главни са методите, а променливите винаги с малки... Наскоро ми го каза един от асистентите. Радвам се, че ти е харесало решението :)

от shristoff (747 точки)



20

Ето и моето решение: source.


от jasssonpet (6814 точки)


0
Човече, ти си дизайнер в писането на код :))

от PetyoKostakov (266 точки)

0
Тука наистина се олигавих, признавам си :D

от jasssonpet (6814 точки)



1
А числата само положителни ли са или могат да бъдат и отрицателни. В примера са дадени само положителни, но според мен решението се усложнява, ако могат да участват и отрицателни числа?

от linach (717 точки)


0
Мисля, че могат да са и отрицателни...

от shristoff (747 точки)


0

My try : http://pastebin.com/ECtsrgjP

Regards

Iliya


от iliyahristov (0 точки)


0

 linach, числата могат да бъдат и положителни и отрицателни. Тествах моя алгоритъм и работи. http://pastebin.com/7rtJe1Fh


от ivivanov (903 точки)


2
Обяснението е в коментарите... почнах на английски и неусетно съм преминала на български. Сега ме мързи да го оправям:
http://pastebin.com/6smiJ59g

от anonymous (0 точки)


0
Колега, коментарите са прекалено много и поне на мен ми е супер нечетаем кода така

от milena.mg (452 точки)


2
http://pastebin.com/EibMMLnW

от iwitass (3695 точки)