Loading...
RFilipov avatar RFilipov 136 Точки

[Homework] C Advanced - Multidimensional Arrays - Problem 4. Sequence in Matrix

Здравейте,

За обхождането на матрици по няколко начина се получава доста дълго решение. Може ли някой да предложи малко по-елегантен начин за тази задача например: Обхождане на матрица по хоризонтал, диагонал и вертикал и намиране на най-дълга повтаряща се поредица от елементи.

http://pastebin.com/jRgwkg6T

Търся по-дбри идеи за намиране на последователни еднакви елементи в низ/матрица като цяло. Единственото за което се сещам, е че вертикала и диагонала могат да се обединят в два цикъла обаче проверките стават...

И още един проблем:

Когато проверявам даден масив по дължината му ако предпоследният и последният елемент са еднакви тъй като стига края на масива добавя последния елемент но излиза от масива и не проверява получения низ/колекция дали е най-голяма и т.н.. Налага ми се да направя допълнителна проверка дали променливата не е стигнала края на масива и ако е така да провери всички случаи. Има ли по-кратък начин да се избегне това. Дали ще кажа - 

int i = 0 и сравнявай всеки път с array[i + 1] или

int i = 1 и сравнявай с array[i - 1] изглежда че в случая е едно и също...

1
C# Advanced 09/07/2015 18:10:30
mgulubov avatar mgulubov 73 Точки

Колега, така написан, кода ти е абсолютно нечетим. Гарантирам ти, че след месец, дори ти самия ще имаш сериозни проблеми да го разчетеш и да схванеш, какво прави, да не говорим за друг човек. Реално, това можеш да си позволиш да го напишеш на C# Advanced изпит, където се гони време и единствената цел на кода е да работи, но се съмнявам, че ще се намери ентусиаст във форума, който да иска да си загуби 2 часа само в четенето и разбирането на кода ти и чак след това да седне да мисли как може да се оптимизира :).

Като цяло, няма лесен и бърз начин, за обхождане на матрица във всички възможни посоки от даден елемент, особено, когато става дума за матрица, в която данните не са подредени по някаква логика. Сещам се за един-два начина, различни от обхождане във всички посоки с вложени цикли и проверки, но до колко ще са по-ефикасни или по-бързи, е спорно. Даже, може да дават и по-лоша производителност, от стандартния вариант. Ако искаш, можеш да прочетеш как се изчислява O нотацията, на един алгоритъм, да я изчислиш за всеки един вариант и да ги сравниш, след това. Друг е въпроса, дали ще си заслужава усилията :).

Иначе, ето моето решение на задачата, от когато писах въпросното домашно - Solution. Можеше да се подреди по-добре, но все пак тепърва учим КПК :). Надявам се, да е полза.

3
RFilipov avatar RFilipov 136 Точки

Предполагам, че това е малко по-разбираемо...може и по добре http://pastebin.com/JYpaK0V7.

Мерси иначе за идеите.

Тука си поиграх малко да направя обхождане по различни диагонали ако на някой му е полезно.

http://pastebin.com/NW2HFU25

0
11/07/2015 17:57:23
alex.mitev avatar alex.mitev 20 Точки

Здравейте, 

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

Съгласен съм, че може да се отдели   всяко обхождане в метод, но и тогава задачата може да стане на 70 реда, и то с обхождане на двата диагонала. моето решение, но преди да ги отделя в методи.

http://pastebin.com/W6T57x9g

 

0
Simooo93 avatar Simooo93 81 Точки

Здравейте колеги, 

Темата е малко стара, но тъй като сега реших задачата ще се включа и с моето решение. Курсът би трябвало да го започна от 15-ти септември, но тъй като нямам търпение се обучавам по миналия курс. Затова очаквам критика тъй като знам, че решението ми няма да е на нужното ниво, но все пак моля да напишете някои друг ред полезен коментар. 

http://pastebin.com/qXgK0dTS

Поздрави

0
alexei.tcekov avatar alexei.tcekov 33 Точки

Здравейте колеги ... снощи започнах да решавам тази задачка .... помислих над нея и не успях да се сетя за някакво по кратко решение ... погледнах тук и намерих тази тема погледнах решениято ,но видях че ще трябва много писана :) . Ето и моето решение , малко по различно  от другите ,които видях

http://pastebin.com/cNLxkBhe

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