Проблем при отпечатване на масив
Реших си задачата https://judge.softuni.bg/Contests/Compete/Index/182#4 от подговителния изпит, но проверката в Judge даде грешка на последния тест. След доста проверки на логиката и експерименти установих, че проблема идва от начина по който отпечатвам масива. Използвал съм Jagged Array.
long[][] matrix = new long[rows][];
// fill matrix
for (int row = 0; row < rows; row++)
{
matrix[row] = Console.ReadLine()
.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Select(long.Parse)
.ToArray();
}
Когато използвам следния код за да принтирам масива, получавам грешка на последния тест:
for (int row = 0; row < rows; row++)
{
Console.WriteLine(string.Join(" ", matrix[row]));
}
но когато използвам този код, всички тестове минават:
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols - 1; col++)
{
Console.Write(matrix[row][col] + " ");
}
Console.WriteLine(matrix[row][cols - 1]);
}
Гледам кода и не мога да разбера защо има разлика при двата начина на отпечатване. Някой има ли идея откъде идва разликата?
Това е пълния код:
Разликата между двата начина не би трябвало да има.
Мисля, че задачата обаче има грешка в условието. Чета, че пише, че всеки ред ще има точно "c" числа разделени по спейс. Отворих 10тия тест и виждам че всеки ред вместо по 20 числа има по 22 числа.
Съответно когато join-неш по спейс, принтираш и 22те числа. Обаче когато пуснеш цикъл до cols пускаш до 20 и принтираш точно колкото трябва - 20те, излишните 2 на ред, въпреки че ги пълниш в матрицата, не ги принтираш.
Благодаря.
В условието пише, че входните данни са винаги валидни и не очаквах такава изненада. Сега съм спокоен, че двата метода за отпечатване са еквивалентни при коректни входни данни. Предпочитам стегнатия и кратък код и по-дългия метод за отпечатване леко ме напряга. Много ти благодаря за бързата реакция.
Edit: добавянето на .Take(cols) при пълненето на матрицата решава елегантно проблема.