04. Trifon's Quest - от днешния изпит
Днес тотално зациклих, някой може ли да хвърли един поглед върху кода и да ми каже къде греша?
Днес тотално зациклих, някой може ли да хвърли един поглед върху кода и да ми каже къде греша?
Здравей,
Първо по условие трябва да знаеш, че първо се обновява кръвта и после се проверява дали е мъртъв -> след това се увеличават ходовете. Един съвет от мен: при изчисляване на изрази винаги слагай скоби, за да може да се разбере ясно приорите на операциите. Ето ти линк към моето решение - надявам се да помогне(това е и решението, което предадох, така че не е толкова чисто).
Поздрави!
1. Не обхождаш матрицата правилно: j го взимаш да ти е броя колони, а i - броя редове, но после пишеш matrix[ j ][ i ] - тоест при матрица, която не е квадратна (например [4,6]) получаваш IndexOutOfRangeException.
2. В програмата ти няма нито един break, в случай че героят умре, тоест - дори да стане с 0 health, на конзолата продължава да си изписва всеки път, че е умрял (докато не обходи цялата матрица).
3. Дори да умре героят, накрая пак ти изписва "Quest Completed!" и всичките там други неща, тъй като не си ги сложил в условна конструкция.
4. Програмата ти изписва номерата на реда и колоната при всяко изпълнение на цикъла (което нямам обяснение защо си го добавил, но в Judge би се приело за грешка). Говоря за Console.WriteLine(i+" "+j);
Това са нещата, които забелязах при един бърз оглед. Може да има и нещо друго, но като за начало според мен трябва да се оправят те. Успех!
мерси , аз в този момент съм го омазал доста други решения гледах по скоро ме интересуваше как да обходя правилно матрицата без да се излиза извън "рейнджа" тъй като не успях да видя какво съм оплескал днес не съм в кондиция аз ще си оправя кода , но ме интересуваше друго мнение и за мен и за вас е полезно мисля. Мерси за съветите ...
п.с. а когато го напиша [i][j] ми го обхойда по ред, а аз искам да ми го обходи по колона от горе на долу и после от долу на горе и т.н.
Просто разменяш местата на циклите за редове и колони.
for (int i = 0; i < matrix[0].Length; i++) // КОЛОНИ
{
// УСЛОВИЕ
for (int j = 0; j < matrix.Length; j++) // РЕДОВЕ
{
// КОД С matrix[j][i]
}
// УСЛОВИЕ
for (int j = matrix.Length - 1; j >= 0; j--) // РЕДОВЕ В ОБРАТНА ПОСОКА
{
// КОД С matrix[j][i]
}
}
Този тип обхождане изглежда по-неприятно в твоя случай с jagged array (тъй като неговата идея е на всеки ред да може да има различен брой колони). Щеше да се получи по-добре с нормална матрица, тъй като тук за дължината на колоните, трябва да избереш произволен ред и да вземеш дължината на масива в него (броя колони е еднакъв за всички редове на матрицата в тази задача по условие). Аз използвам ред 0, тъй като какъвто и да е размера на матрицата, ще присъства в нея. Надявам се това да помогне.
Целия проблем е тук в обхождане на матрицата - колега благодаря ти много. Точно тук съм ги "насосал" и сега всичко запали от ряс ... аз останалите съм ги оправил
п.с. аз нали щото съм инат другата матрица я пренебрегнах, а исках да си я направя с тази и на изпита ми гръмна :(
Здравейте! За да не отварям нова тема, искам да попитам, какво пропускам, че получавам 70/100? Ако някой има възможност да даде насока :)
код : http://pastebin.com/vVJY1yYe
Много благодаря :)
100 / 100 - https://pastebin.com/vEDq1wHp