Условие
Задача: Все ненулевые элементы матрицы $D\left(k,l\right)$ расположить в начале массива $E\left(k \times l\right)$ и подсчитать их количество..
Входные данные
Два натуральных числа $k$ и $l$. А так же $k \times l$ элементов массива.
Выходные данные
Матрица $D$, ненулевые элементы массива $E$, количество ненулевых элементов
Тесты
$k$ | $l$ | Матрица $D$ | Ненулевые элементы матрицы $E$ | Количество ненулевых элементов |
2 | 3 | 2 7 0 1 4 9 |
2 7 1 4 9 | 5 |
3 | 4 | 6 7 4 2 9 0 1 3 0 8 0 19 |
6 7 4 2 9 1 3 8 19 | 9 |
4 | 2 | 8 9 0 1 5 2 7 26 |
8 9 1 5 2 7 26 | 7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
class Main { static function main() { var K:Int = Std.parseInt(Sys.stdin().readLine()); var L:Int = Std.parseInt(Sys.stdin().readLine()); var M:Int = K * L; var D:Array<Array<Int>> = [for (x in 0...K) [for (y in 0...L) 0]]; var E:Array<Int> = [for (x in 0...M) 0]; var count:Int = 0; for (i in 0...K) { for (j in 0...L) { D[i][j] = Std.parseInt(Sys.stdin().readLine()); if (D[i][j] != 0) { E[count++] = D[i][j]; } } } for (i in 0...M) { if (E[i] == 0) { E.splice(i, E.length - i); } } Sys.println(E); Sys.println("Количество ненулевых элементов матрицы E = " + count); for (u in 0...K) { for (y in 0...L) { Sys.print(D[u][y] + " "); } Sys.println(""); } } } |
Решение
Вводим числа $k$ и $l$. Получаем размерность массива $E$ — $M = k * l$. Заходим в цикл в котором вводим все элементы матрицы $D$ и считаем количество ненулевых элементов и перегоняем их в массив $E$. Потом удаляем нулевые элементы из матрицы $E$.
Евгений Кравчук недавно публиковал (посмотреть все)
- A703 - 08.06.2017
- Ю4.12 - 07.06.2017
- e-olymp 1210. Очень просто!!! - 26.03.2017
Зачёл, но остался вопрос — нет ли способа удалять элементы из конца итогового массива не по одному, а сразу все?
Конечно же такая возможность есть такая возможность, так как функция splice() принимает два аргумента — начальную позицию и длину. Внес изменения в код, чтобы удаляло сразу все нули.