Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/55: Рейтинг темы: голосов - 55, средняя оценка - 4.71
2 / 2 / 5
Регистрация: 31.03.2014
Сообщений: 102

Удалить строку и столбец

02.07.2014, 09:54. Показов 10168. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание таково: получить квадратную матрицу n-1, путем удаления строки и столбца, на пересечении которых находится наибольший элемент.

Элемент нашел, индексы его, создал вторую матрицу. Но вот удалить строку и столбец пока не выходит. Тем более, что просили сделать это как можно оптимальнее. Проблема возникает в момент передачи меньшей матрице данных от большей. Через цикл как-то не получается. Создавать ещё массив третий - замного...

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//Найти наибольший элемент матрицы
//создать матрицу n-1 без строки и столбца
//пересечением которых является найденный наибольший элемент
import static java.lang.System.out;
 
public class OtbrositStrIStolb {
    
public static void main(String [] args){
    int n = 3;
    
    int [][] matrix = {{1,4,3},{8,9,6},{7,4,1}};
    
    
    out.println("Исходная матрица");
    out.println();
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            out.print(matrix[i][j]+"  ");
        }
        out.println();
        }
    //Нахожу наибольший элемент
    int min = 0;
    int s=0;
    int z=0;
    min = matrix[0][0];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){         
                        
            if(min<matrix[i][j]){
                
            min = matrix[i][j];
            
            s = i;
            z = j;
        }
        }
    
    }
    out.println();
    out.println("Наибольший элемент и его координаты");
    out.print(min+" строка "+s+" столбец "+z); 
    
    out.println();
    out.println();
    
    //Создаю пустую матрицу, инициализирую нулями
    int[][] matrix1 = new int[n-1][n-1];
    for(int i = 0; i < n-1; i++){
        for(int j = 0; j < n-1; j++){
                    matrix1[i][j] = 0;  
            
        }
            out.println();
        }
    //от здесь чего-то не то выходит
    int t = 0;
    int b = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){         
            if(t!=s&&b!=z){
            matrix1[i][j] = matrix[t][b];
            t++; b++;
            }
            
        }
        out.println();
    }
    //На выходе - результат неверный
    for(int i = 0; i < matrix1.length; i++){
        for(int j = 0; j < matrix1.length; j++){
            out.print(matrix1[i][j]+"  ");
        }
        out.println();
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2014, 09:54
Ответы с готовыми решениями:

Удалить столбец и строку с элементом
def new_matrix(matrix, n, _max): j = f for i in range(n): for j in range(n - 1): matrix = matrix ...

Удалить строку и столбец матрицы
Сформировать матрицу 5*5 случайных целых чисел в диапазоне от -20 до 60. Напечатать матрицу. Найти максимальный элемент и удалить строку и...

В матрице удалить строку и столбец
В двумерной прямоугольной целочисленной матрице размера m*n, заданной случайными числами, удалить строку номер k и столбец номер p,...

6
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
02.07.2014, 21:48
Edward111,

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class Test {
 
    private static final int SIZE = 5;
    
    public void init_mas(int[][] mas) {
        
        for(int i = 0; i < SIZE; ++i)
            for(int j = 0; j < SIZE; ++j)
                mas[i][j] = (int) (Math.random() * 10); 
    }
    
    public void show_mas(int[][] mas) {
        
        System.out.println("Matrix:");
        for(int[] values : mas) {
            for(int value : values)
                System.out.printf("%3d", value);
            System.out.println();
        }
    }
    
    public int[][] change_mas(int[][] mas) {
        
        int max = Integer.MIN_VALUE;
        int i_max = 0, j_max = 0;
        
        for(int i = 0; i < SIZE; ++i) {
            for(int j = 0; j < SIZE; ++j) {
                if(mas[i][j] > max) {
                    i_max = i;
                    j_max = j;
                    max = mas[i][j];
                }
            }
        }
        
        System.out.println("\nМаксимальный элемент: " + max + "\ti: " + i_max + "\tj: " + j_max + "\n");
        
        int[][] _mas = new int[SIZE - 1][SIZE - 1]; 
        
        int new_i = 0, new_j = 0;
        
        for(int i = 0; i < SIZE; ++i) {
            for(int j = 0; j < SIZE; ++j) {
                
                if(i != i_max) {
                    if(j != j_max) {
                        _mas[new_i][new_j] = mas[i][j];
                        ++new_j;
                    }
                }
                else {
                    --new_i;
                    break;  
                }
            }
            
            ++new_i;
            new_j = 0;
        }
            
        return _mas;
    }
    
    public static void main(String[] args) {
        
        Test test = new Test();
        
        int[][] mas = new int[SIZE][SIZE];
        
        test.init_mas(mas);
        test.show_mas(mas);
        
        mas = test.change_mas(mas);
        
        test.show_mas(mas);
    }
 
}
0
17 / 17 / 6
Регистрация: 19.05.2014
Сообщений: 67
03.07.2014, 09:46
Такс, а не достаточно просто распечатать первый массив без строки и столбца с максимальным элементом? ну это в смысле если ставить приоритет на оптимальности но если, обязательно то нужно всего лишь откомментить пару блоков в коде:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
public class matrix {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        int n = 5; // укажите какой размерности нужна квадратная матрица
        int max = 0;
        int row =0;
        int col =0;
        int new_row=0;
        int new_col=0;
        
        int[][]matrix = new int[n][n];
        int [][]matrix_res = new int[n-1][n-1]; 
        
        // заполнение квадратного массива с длины  n. [п.с. очень лень было вписывать элементы рукой]
        for(int i = 0; i<matrix.length; i++){
            for(int j = 0; j<matrix[i].length; j++){
                matrix[i][j] = (int)(Math.random()*100);
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println();
        
    
        // поиск (первого) макисмального элемента
        for (int i =0;i<n;i++){
            for (int j=0;j<n;j++){
                if (max < matrix[i][j]){
                    max = matrix[i][j];
                    row=i;
                    col = j;
            }
        }
    }
    
      for (int i =0;i<n;i++){
          if (i != row){
            
              for (int j=0;j<n;j++){
                  if (j!=col){
                
                      System.out.print(matrix[i][j]+" ");
                  //  matrix_res[new_row][new_col] =matrix[i][j]; //если создание результативного массива обязательно то нужно откомментить
                      new_col++;
                  }
            
              }
              new_col =0;
              new_row++;
              System.out.println();
        }
    }
    
    System.out.println();
    
   /*  
     // распечатка резултативного массива
     for(int i = 0; i<matrix_res.length; i++){
    
        for(int j = 0; j<matrix_res[i].length; j++){
            
            System.out.print(matrix_res[i][j]+" ");
        }
        System.out.println();
    }
    System.out.println();
    
    */
    }
 
    
    
}
0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
03.07.2014, 14:25
leopold_87,
Цитата Сообщение от Edward111 Посмотреть сообщение
необходимо получить квадратную матрицу n-1, путем удаления строки и столбца
. Если выводить просто с пропуском строки и столбца, то какой толк, матрица не изменилась

Цитата Сообщение от leopold_87 Посмотреть сообщение
int n = 5; // укажите какой размерности нужна квадратная матрица
тогда дайте возможность пользователю вводить размерность.
0
17 / 17 / 6
Регистрация: 19.05.2014
Сообщений: 67
03.07.2014, 14:44
Может я в первый раз непонятно написал, в скрипте есть два варианта, если нужно изменить квадратную матрицу с порядка n в n - 1, нужно просто откомментировать одну строчку в скрипте!!! это же ведь не сложно?

также, поверьте, у Вас в коде намного сложнее задаются как порядок так и входные элементы для матрицы!
Думаю добавить scanner к этому коду будет не сложно, тем более что в ТС этого не было! рандомное заполнение элементов написал для того чтобы было легче тестить!

Добавлено через 7 минут
Цитата Сообщение от leopold_87 Посмотреть сообщение
также, поверьте, у Вас в коде намного сложнее задаются как порядок так и входные элементы для матрицы!
- это относиться к самому первому коду)))


Цитата Сообщение от Yoghurt_92 Посмотреть сообщение
private static final int SIZE = 5;
кто- то ведь тоже не дал возможности ввести размерность матрицы пользователю?
0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
03.07.2014, 15:33
leopold_87, что вы так реагируете? У ТС не получилось решить поставленную задачу, я дал свой вариант, а давать возможность вводить размерность или нет, это уже не мое дело, программа делает свое дело и этого достаточно

Но в вашем варианте есть один недочет, он относится к этому куску кода

Цитата Сообщение от leopold_87 Посмотреть сообщение
for (int i =0;i<n;i++){
* * * * * if (i != row){
for (int j=0;j<n;j++){
* * * * * * * * * if (j!=col){
System.out.print(matrix[i][j]+" ");
* * * * * * * * * // *matrix_res[new_row][new_col] =matrix[i][j]; //если создание результативного массива обязательно то нужно откомментить
* * * * * * * * * * * new_col++;
* * * * * * * * * }
}
* * * * * * * new_col =0;
* * * * * * * new_row++;
* * * * * * * System.out.println();
* * * * }
* * }
Смотрите, размерность результирующей матрицы то меньше, и если убрать комментарии, то программы вылетит с ошибкой, за исключением того случая, когда максимальный элемент будет в в последней строке

Добавлено через 7 минут
leopold_87, а нет, ошибся, извините
0
03.07.2014, 15:56

Не по теме:

:jokingly:Я видимо два раза написал и оба раза как-то не так выразился, я вовсе не думал плохо реагировать. Все нормально вобщем :friends:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.07.2014, 15:56
Помогаю со студенческими работами здесь

Удалить из матрицы строку и столбец
Задача такова: реализуйте следующее преобразование двумерной матрицы: при передаче в выходную матрицу их исходной изымают мы строка и...

Из матрицы удалить I-ю строку и J-й столбец
Дана действительная квадратная матрица N×N, натуральные числа I и J (1 ≤ I ≤ N , 1 ≤ J ≤ N ). Из матрицы удалить I-ю строку и J-й столбец.

Удалить из матрицы строку и столбец
Привет всем ,помогите пожалуйста написать программу : Заранее спасибо всем. Добавлено через 11 часов 45 минут Никто не...

Удалить из матрицы строку и столбец
Привет. Может кто-то знает как решается. Я на первом курсе, можете написать попроще. Задание: Дана действительная квадратная матрица...

Удалить строку и столбец матрицы
#include &lt;iostream&gt; using namespace std; void ReadMatr(int **a, int n, int m);//Ввод матрицы с клавиатуры void PrintMatr(int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru