Draw Fort ? Exam 6 march
30/100 При големите числа не минава ... Ако може да ми обясните защо ?
http://pastebin.com/KH5C4PWa
30/100 При големите числа не минава ... Ако може да ми обясните защо ?
http://pastebin.com/KH5C4PWa
Смених ти само едно нещо което го имаш на 3 места в кода и дава 100 точки. Това е формулата за изчисляване на средните редове на първия, предпоследния и последния ред. На първия и предпоследния са долни черти, а на последния интервали. Помисли каква е правилната формула.
n * 2 - 4 - 2 * (n / 2) << И се очаква на изпит да се сетим за тази формула ?
Всъщност формулата е точно тази, попринцип в математиката това е еквивалентно на n - 4, но тук не се получава и аз съм ползвал тази, ето ти моето решение, според мен имаш излишен If ..., който усложнява логиката.
Решение: http://pastebin.com/W0PCWRAe
Формулата изглежда сложна, но не е чак толкова трудно да стигнем до нея. Изполва се следната логика:
Знаем че общата дължина винаги е 2*n. Знаем и дължината на останалите елементи без търсеният, но като извадим от общата дължина всички останали елементи, ще получим и търсеният елемент.
Пример, гледаме 1 ред. : 2*n(обща дължина) - 2*(n/2)(вижда се че имаме 2 пъти n/2 на брой екзорчета ->"^" ) - 4 (имаме 4 наклонени черти). -> 2*n-(2*(n/2))-4
Ето и едно решение от мен: http://pastebin.com/CEwQJpLM
Задачата е ужасна и е много трудно да се сетиш за формулата. Ето едно решение и от мен:
https://github.com/anestieva/Code/blob/master/SoftUniBasicsExam/505DrawFort/DrawFort.cs
Не бих казал, че е чак толкова трудна задачата. Просто трябва да се следва логиката и сами ще стигнем дотази формула, която на пръв поглед изглежда сложна. Просто трябва много решаване на задачи и дори гледане на различни подходи за решението й.
Добре де. Имам следния въпрос в случая джъдж какво гледа формулата по, която се изчислява или резултата? Щото решенията си изглеждат работещи въпреки, че дава 30/100.
Това е първото, което написах : https://pastebin.com/Pj7mqyir и резултатите от въвдените числа ми изглеждат еднакви. Темата е стара, но дано някой може да ми разясни нещата. :))
Аз я реших токущо. Много е интересна и полезна. Реших да не ползвам методи защото не сме ги взели и второ защото наученото е напълно достатъчно да се реши задачата, просто трябва добър алгоритмичен план. Първото важно нещо е да разберем, че средният сегмент трябва да е четно число, тоест итерациите в цилките винаги да са четни, този проблем го реших с 2*n. Вторият важен извод е повече от тривиален - деленето на променливата от целочислена става пак целочислена, тоест при поредни стойности на променливата 5 / 2 = 2 и 6 / 2=3, ако искаме 5 / 2 = 3 и 6 / 2 = 3 допълвам функцията с (n + 1) / 2 и добавям цифра ако целя опреден брой итерации +1 или +2. Зависимостите са изцяло линейни.
Ако искаме да прескочим с една стъпка (ако условието го изисква или е в услуга на нашият алгоритъм), тоест да са еднакъв брой итерации не 5 и 6 ами 6 и 7, просто добавяме към числителят 1 - (n+1) / 2, така се получава 6 / 2 = 3 и 7 / 2 = 3.
Трябва да отбележа и нещо много важно при конструирането на цикли 6/2 не е равно на 3/2 + 3/2, както е в математиката. От тук нататък всичко е въображение.
https://pastebin.com/ARhqnSd5
Сигурно може да се оптимизира още, но нямам време за това. Важни са изложените горе концепции.