Дана действительная квадратная матрица порядка [latex]n[/latex], натуральные числа [latex]i, j \left(1\leq i\leq n, 1\leq j\leq n \right)[/latex]. Из матрицы удалить [latex]i[/latex]-строку и [latex]j[/latex]-столбец.
[latex]n[/latex] | Матрица. | [latex]i[/latex] | [latex]j[/latex] | Полученная матрица. | Комментарий. |
3 | 1 2 3
4 5 6 7 8 9 |
2 | 1 | 2 3
8 9 |
Тест пройден. |
4 | 0,5 1 6 0
3 8 12 0,3 10 4,6 8 9 0 3,5 6,4 10 |
4 | 3 | 0,5 1 0
3 8 0,3 10 4,6 9 |
Тест пройден. |
2 | -40 87
9 -3 |
1 | 1 | -3 | Тест пройден. |
Код программы (C++):
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 |
#include <iostream> using namespace std; int main() { int n; cin >> n; double **m; m=new double *[n]; for (int i=0; i<n; i++) m[i]=new double [n]; double **m1; m1=new double *[n-1]; for (int i=0; i<n-1; i++) m1[i]=new double [n-1]; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { cin >> m[i][j]; } } int i0, j0; cin >> i0 >> j0; for (int i=0, tr=0; tr<n-1;) { if (i!=i0-1) { for (int j=0, td=0; td<n-1; j++, td++) { if (j==j0-1) j++; m1[tr][td]=m[i][j]; } i++; tr++; } else i++; } delete []m; m=m1; for (int i=0; i<n-1; i++) { for (int j=0; j<n-1; j++) { printf ("%5.3lf\t", m[i][j]); } cout << endl; } return 0; } |
Java:
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 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in = new Scanner (System.in); int n; n = in.nextInt(); double [][]m = new double[n][n]; double [][]m1 = new double[n-1][n-1]; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { m[i][j] = in.nextDouble(); } } int i0, j0; i0 = in.nextInt(); j0 = in.nextInt(); for (int i=0, tr=0; tr<n-1;) { if (i!=i0-1) { for (int j=0, td=0; td<n-1; j++, td++) { if (j==j0-1) j++; m1[tr][td]=m[i][j]; } i++; tr++; } else i++; } m=m1; for (int i=0; i<n-1; i++) { for (int j=0; j<n-1; j++) { System.out.print(m[i][j]+" "); } System.out.println(); } } } |
Сначала пользователю предлагается ввести порядок матрицы, затем элементы этой матрицы. После чего, по условию задачи, пользователь должен задать [latex]i[/latex]-строку и [latex]j[/latex]-столбец, которые программа должна изъять из матрицы.
Протестировать программу можно здесь (C++) и здесь (Java).
Увы, нужно не просто напечатать результат. Результат нужно получить.
Т.е. в m должен оказаться массив с уменьшенным числом строк и столбцов.
Извините, пожалуйста, я неправильно поняла условие задачи.
Сейчас всё исправлено.
Пустяки, дело житейское 🙂
Два замечания:
1. Вы делаете два отдельных прохода по матрице — для удаления строки, потом для удаления столбца. Стоит объединить эти действия, чтобы не передвигать элементы массива дважды.
2. Размер массива m не изменился. Просто Вы не используете последнюю строку и столбец. После «удаления» строки и столбца в массиве должно оказаться меньше строк и столбцов.
А что если как-то так поступить?
При этом нужно будет учесть, что двумерный динамический массив — массив строк (массив массивов). В нём можно быстро «удалять» целые строки.
Оба замечания учтены.
Зачтено. Молодец.
Вообще-то на Java тоже есть форматированный вывод System.out.format (или то же самое System.out.printf). Наверное лучше их воспользоваться для улучшения визуального представления результирующей матрицы (как в Вашем C++ решении).
В остальном замечаний нет.