Largest common end 36/100
http://pastebin.com/Ze1T4wWN до тук я докарвам. Предполагам, че не излизат входовете, при които са с различна дължина. Помощ???
http://pastebin.com/Ze1T4wWN до тук я докарвам. Предполагам, че не излизат входовете, при които са с различна дължина. Помощ???
Здравей!
1. Защо пърият цикъл е само до средата на по-дългия масив? Трябва да е до края на по-късия, за да обхванеш цялото възможно съвпадение.
2. Вторият цикъл е много сбъркан. Няма да започне никога, защото първата му стойност е средата на масива, а условието е да е по-голям от дължината му. И защо започва от средата на по-дългия масив?
3. Цялата втора проверка може да стане по няколко начина. Единият е да обърнеш единия масив с Array.Reverse(arr2) и да ги сравняваш като в първата проверка. А може да тръгнеш от краищата на всеки масив и да сравняваш всеки елемент. Аз го направих в един for цикъл, нещо такова:
for (int i = arr1.Length - 1, j = arr2.Length - 1; i >= 0 && j >= 0; i--, j--)
{
if (arr1[i] == arr2[j])
{
commonRightLen++;
}
else
{
break;
}
}
Ето ти моя код.
Едит: Малко трудно я направих, и аз се мъчих в началото.Гледай видеата там са решени някои от тях.
Arrays and Lists Arrays and Lists - Exercises
Итерациите ти трябва да са: int iterationsCount = Math.Min(arr1.Length, arr2.Length);, за да не излезнеш от някой array. Няма нужда от толкова сложни сметки в for циклите, защото те се извършват при всяка итерация (не съм 100% убеден) т.е бавят. Изкарвай си ги в отделни променливи + така разбираш дали са правилни по - лесно. Ето един примерен фикс :)
Може ли малко обяснение каква е идеята на този Index=1 ? Като цяло не разбрах как работи 2рия for цикъл,идеята е че почваш отзад напред,аз лично не се сещам как става ако не са равни,как взимаме последните части на по-дългият. Виждам че идеята на index да оправи прожлема,но не разбирам как работи :)
Броят на операциите си го определихме преди първия for цикъл. Във втория тръгваме отзад напред(може и да го променим - отпред назад), то ни е само да върти iterationsCount пъти, а index-a е помощна променлива започваща от 1, за да взимаме винаги последния елемент от arr1 и arr2 (arr1[arr1.Length - index] == arr2[arr2.Length - index]). След това си е ъпдайтваме. Забелязах, че ъпдейта на index-а съм го написал в if-a, което е грешно трябва да е извън (оправено).
Благодаря! С Array.Reverse() стана много лесно.