Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

i.minchev.qa avatar i.minchev.qa 34 Точки

Задача: 06 Hourglass Sum , Chapter Lists and Matrices - Exercises

Здравейте, 

пак зациклих 83/100 - http://pastebin.com/TL1Ccyhk

Пробвал съм с типове данни  "long",  "decimal" и "double", а резултатът е един и същ.

Условие:  https://softuni.bg/trainings/1367/programming-fundamentals-may-2016

                Раздел:  List and Matricies - Exercises

                Задача:   6.Hourglass Sum,

Предложения колеги?

Тагове:
0
Programming Fundamentals 18/09/2016 20:00:32
annsta avatar annsta 305 Точки

Аз бих променила проверката на ред 46 така:

if(rowSum == rowScan + 1)
   sumHG += sumProcessMatrix[rowSum, colScan + 1];

 

1
i.minchev.qa avatar i.minchev.qa 34 Точки

С тези корекции дава 0/100

Причина: трябва един break; да се добави и блокът ще добие вида:

if (rowSum == rowScan + 1) // skipping middle row's first and last elements 
                    {
                        sumHG += sumProcessMatrix[rowSum, colScan + 1];
                        break;
                    }

В противен случай средния елемент ще се добави 3 пъти.

Въпреки това пак дава 83/100, така че проблемът е на друго място, ама къде точно...?

0
01/06/2016 10:59:41
annsta avatar annsta 305 Точки

Недоглеждане от моя страна при сравняването на кода. Извинения! Имах предвид следния алгоритъм, дано няма грешки при подмяната на имената на променливите ;)

for (int rowSum = rowScan; rowSum < rowScan + 3; rowSum++)
{
   if (rowSum == rowScan + 1)
      sumHG += sumProcessMatrix[rowSum][colScan + 1];
   else
   {
      for (int colSum = colScan ; colSum < colScan + 3; colSum++)
         sumHG += sumProcessMatrix[rowSum][colSum];
   }
}

 

2
01/06/2016 11:18:49
KrasimirPetkov avatar KrasimirPetkov 328 Точки

За тази задача можеш директно да си използваш алгоритъма от предната: Max Platform 3x3.

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

Решение: http://pastebin.com/SB6H64MH

1
01/06/2016 10:55:25
i.minchev.qa avatar i.minchev.qa 34 Точки

Благодаря на колегата Krasimir Petkov,

с помоща на неговия код открих грешката си на ред 22

Трябва да бъде:   long maxHGlassSum = long.MinValue;

Реално:                long maxHGlassSum = 0;

Дилетантска грешка от моя страна.  :-)

Съвсем отделен е въпросът, че кодът на г-н Петков е има няма 30 реда по-къс от моя :).

Благодаря и на колежката annsta за включването :) .

Спорен ден и най вероятно до края на деня пак ще сервирам проблем с някоя друга задача.

2
01/06/2016 11:46:03
InaAbadjieva avatar InaAbadjieva 8 Точки

Здравейте,

Аз използвам същия алгоритъм като предната задача, но пропускам 2 от клетките при сумирането. На 2 от тестовете обаче гърми. Използвам long и long.MinValue като в предната, но явно изпускам нещо...

Ако някой има идея, да помага...

http://pastebin.com/yQECycra

0
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Мисля, че в момента проверката с if-else, в CalculateSum не е точна.

Защо row + i == 1 && col + j == 0 ||  row + i == 1 && col + j == 2 ? Така, ако не греша не сумираш само клетки [1,0] и [1,2], което е точно спрямо матрицата 3х3, но не и спрямо тази 6х6. Извинявай, ако бъркам нещо - не съм гледал кода обстойно.

За справка, в постовете по-нагоре съм качил моето решение.

Успех!

0
01/06/2016 19:36:42
mirela95 avatar mirela95 56 Точки

Здравейте,

ето и моето решение http://pastebin.com/KiPt89ia. Едва ли е много оптимално да си извеждам нужните клетки като променливи, но мисля, че е по-четимо. 

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