11. Equal Sums - Chapter: Arrays - Exercises - ??
Здравейте,
може ли малко помощ?
Код верен на 71% - http://pastebin.com/dGtDsD49 , някъде обаче се дъни и ми трябва Вашата помщ за останалите 29%.
Благодаря Ви предварително за включванията.
Поздрави.
Благодаря ти много за включването AntyfrizZz,
1. Прав си наистина пропуснах да посоча път към условието.
Ето го и него - https://softuni.bg/trainings/1367/programming-fundamentals-may-2016
Селция - Arrays - Exercises, фаил Упражнение - Условия
2. Ето ново решение кето пак дава 71 точки само - http://pastebin.com/05gHHheP
Честно да кажа не схващам защо трябва да ползвам двумерен масив вмест просто 2 отделни суми sumLeft и int sumRight.
2.1 Стартирам от член на масива i = 1;
2.2 Обхождам масив int []number със for (int i = 1; i < number.Length - 1; i++) // пропускам умишлено 1-вия и последния елементи на масива. Защо: т.к в ляво от пъривя и в дясно от последния елемент няма нищо за събиране.
2.3 Сумирам всичко в ляво от текущия елемент 'i' и ако е изпълнено условието if (sumLeft == number[i]) тогава сумирам всичко от дясно for (int iRight = i + 1; iRight < number.Length; iRight++)
2.4 if (sumLeft == sumRight)
{
index = i;
break;
}
Би трябвало да сработи, но не 71/100.
Започвам да си мисля, че е проблемът е в грешно изписване на "no" или някаква друга подобна щуротия.
След малко ще пробвам и по твоя метод колега.
Здравей,
Така както си написал кода си, искаш сумата на елементите в ляво да е равна на сумата на елементите в дясно, както и те 2те да са равни на самия елемент. Никъде в условието не пише такова нещо. Искат само сумата в ляво от елемента да е равна на тази от дясно. Чети си добре условията. Чист късмет е, че имаш толкова точки :). Оправи си това условие и може да получиш 100/100.
В твоето решение, при всяко завъртане на главния цикъл, ти завърташ още 2 малки цикъла, което доста забавя нещата. В случая може и да ти даде 100 точки с такова решение на този етап от обучението си, но е добре за напред да ги съобразяваш тези работи.
Двумерният масив се изпозлзва точно за това, да не въртиш постоянно цикли и да пресмяташ нещо, което може да бъде пресметнато и без да въртиш едно и също нещо постоянно. Сега ще ти покажа стъпка по стъпка какво се случва като попълваш.
Примерът от условието 1 2 3 3
Преди да завъртиш цикъла, сетни стойностите в 1вата колона. Ако са равни, принтираш 0 и return;
След това завърташ само един цикъл. В твоето решение с главния цикъл въртиш и още 2 излишни в него. Реално, таблицата със суми в ляво се попълва, като към предходната стойност добавиш стойността на предходния индекс. Стойностите в реда "Сума в дясно" се получават, като от предходния индекс извадиш стойността на текущия индекс. Проверяваш дали 2те стойности за текущия индекс са равни. Ако са равни - принтираш индекса и return;
Ако след извъртане на цикъла не си намерил такава стойност, принтираш "no" и това е.
Ако си разбрал това решение, пробвай да го имплементираш с масив 2 на 2. Сетваш си началните стойности в 1вата колона, на следвашата итерация пишеш във втората колона, на следващата итерация презаписваш в 1вата колона, на следващата във 2рата и т.н.
Поздрави!
Ето го моето решение и аз бях зациклил на 71 но го оправих. Цък