Софтуерно Инженерство
Loading...
+ Нов въпрос
xanderbg avatar xanderbg 53 Точки

[homework] - Arrays - Exercises - 1.Largest Common End - пропускам кейс

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

 

на задачата 1.Largest Common End изкарвам 90 точки, а не мога да се сетя за повече кейсове, които да покрия. Нулевите тестове ги покривам, както и кейсовете когато двата масива са с равен брой елементи или един от тях или и двата имат само по 1 елемент. Също така покривам и кейсовете когато и в началото, и в края имам някакви сходства както и когато имам еднакъв брой сходства в началото и в края. Може ли да ми кажете какво пропускам?

 

Кода ми не е много красив, но поне върши повечето работа :) : към кода

1
Programming Fundamentals 29/05/2016 13:42:03
xanderbg avatar xanderbg 53 Точки

Уж и моята идея е такава, въпреки, че съм го написал доста по-сложно, но някъде изпускам нещо. Явно втрябва да дебъгвам, но не знам с какъв вход или да го пренанпиша. Благодаря, все пак явно поне на теория съм се сетил за всички кейсове.

1
Silvave avatar Silvave 127 Точки

Когато дължината на единият ти масив е равен на 1, а дължината на другият е по-голяма, дава грешен резултат. Примерно с инпут на масивите - str1 = java и str2 = php java или str2 = java и str1 = php java, ти дава резултат 0, а трябва да ти даде резултат 1. Проблема ти идва от булевите променливи на 11-ти и 12-ти ред и else if проверката на 30-ти ред от кода ти в github. Ако ги махнеш, защото са излишни и промениш малко булевите си стойности на 74-ти и 87-ми ред (github), защото хвърлят exception, би трябвало да ти даде 100 точки.

1
tihomirj avatar tihomirj 31 Точки

Използвай като вход следния пример и ще разбереш какво не е наред:

аа аа аа dd

vv dd

или

vv dd

aa aa aa dd

Методът  RightToLsftScan () се чупи в тази част:

bool areElementsEqual = str1[i] == str2[i - (str1.Length - str2.Length)];или
bool areElementsEqual = str1[i - (str2.Length - str1.Length)] == str2[i];

Както си го направил, ще се чупи всеки път, когато разликата в дължините на масивите е с 2 по-голяма от дължината на единия масив. Използваш два цикъла

for (int i = str1.Length - 1; i >= str2.Length - 1; i--)
 и  аналогично
for (int i = str2.Length - 1; i >= str1.Length - 1; i--)

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

Ако си любопитен виж аз как съм решил задачката:

http://pastebin.com/ELd9T2XH

 

 

 

1
29/05/2016 23:57:41
DeyanStanchev avatar DeyanStanchev 0 Точки

Здравейте, ето го и моето решение, използвам arr1.Reverse().ToArray() - и пак чета и проверявам.

https://github.com/dublinstand/Software-University-Programming-Fundamentals/blob/master/3.Arrays/11_LargestCommonEnd/LargestCommonEnd.cs

0