Професионална програма
Loading...
murkata86 avatar murkata86 10 Точки

Advanced C# - Sets and Dictionaries -Problem 19 Crossfite

Здравейте,

Вече втори ден се мъча върху задача 19 Crossfire от домашното Sets and Dictionaries. В Judge получавам само 30 точки. Ето го и кода, който написах:

 

http://pastebin.com/PWLbakDE

 

Някой ще може ли да погледне и да каже къде евентуално е проблема?

 

Поздрави,

Иван

Тагове:
0
C# Advanced
ArmenPotourlyan+deleted! avatar ArmenPotourlyan+deleted! 488 Точки

Здравей,

Ти проверяваш дали центърът на crossfire-a е в матрицата и на базата на това разполагаш пораженията по матрицата. Обаче ако центърът не е в матрицата, пак може да има поражения!

 

Пример: център 1, -1 с радиус 200

1 2 3                 1 2 3

4 5 6       =>      7 8 9

7 8 9
 

Впрочем вместо да си играеш с масивите, може би ще ти е по-лесно с лист от лист (List<List<int>>) от самото начало и просто да вадиш поразените клетки. Така няма излишно да копираш масиви наляво и надясно.

2
29/05/2016 16:05:19
murkata86 avatar murkata86 10 Точки

Супер, мерси много!

0
murkata86 avatar murkata86 10 Точки

Добавих проверката дали центъра е извн матрицата и дали кръста евентуално ще удари някои от клетките, но все още получавам само 30 точки и сега на последния тест фейлва проверката за време:

 

http://pastebin.com/bxwaxGWk

0
ArmenPotourlyan+deleted! avatar ArmenPotourlyan+deleted! 488 Точки

Навсякъде remainingRadius е сметнат грешно. Размерът на crossfire-a става с 1 по-малко по всички направления. Освен това, не може да има празни редове - когато един ред изчезне този след него отива на неговото място.

Пример:

1 2                                                                                     1 2

4              (при бомбардировката 4 изчезва) =>         6 7 8

6 7 8

0
31/05/2016 09:59:05
ArmenPotourlyan+deleted! avatar ArmenPotourlyan+deleted! 488 Точки

Впрочем задачата е от изпит по Java. Можеш да намериш тестовете тук. Взимаш тези тестове, на които се проваля програмата, и дебъгваш. След всяка бомбардировка можеш да си принтираш матрицата и да преценяваш дали работи правилно програмата.

0
murkata86 avatar murkata86 10 Точки

Мисля, че проблема се крие на друго място...:

matrix[i, j] = (j + 1) + (i * rows);

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

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

Благодаря ти за помощта.

0
murkata86 avatar murkata86 10 Точки

Оправих матрицата и след това видях от къде идват останалите проблеми. А иначе дори не бях забелязал, че така остава празен ред, но видях и това от къде идва - при създаването на списък в списъка, и след това, въпреки че този списък не го пълня, той си остава и се показва като празен ред. Радиусите ги оправих и тях. 90 от 100 точки. На последния тест фейлва за памет, така че сега ще гледам да пренапиша цялата програма като използвам само List<List<int>>.

Поздрави,

Иван

0