Форум программистов, компьютерный форум CyberForum.ru

[C++] Задача на матрицу - C++

Восстановить пароль Регистрация
 
fierswolf
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 16
15.11.2011, 13:14     [C++] Задача на матрицу #1
Задана матрица размеро n x m. Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрицы таким образом, чтобы максимальный по модулю элемент был расположен на пересечений k-ой строки и k-ого столбца.
 Комментарий модератора 
Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2011, 13:14     [C++] Задача на матрицу
Посмотрите здесь:

Задача на матрицу C++
Задача на матрицу C++
C++ Задача на квадратную матрицу
C++ Задача на матрицу
Задача про матрицу C++
Задача на матрицу C++
C++ Задача на матрицу
Задача на матрицу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
15.11.2011, 14:12     [C++] Задача на матрицу #2
Цитата Сообщение от fierswolf Посмотреть сообщение
Задана матрица размеро n x m. Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрицы таким образом, чтобы максимальный по модулю элемент был расположен на пересечений k-ой строки и k-ого столбца.
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
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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
 
using namespace std;
 
int main() {
    const int n = 5;
    const int m = 5;
    int A[n][m];
    int k, max_index = (n > m) ? n : m;
 
    srand(time(NULL));
 
    // Заполнение матрицы случайными числами
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            A[i][j] = rand()%51 - 25;
            cout << A[i][j] << '\t';
        }
        cout << endl;
    }
 
    cout << "Enter k[0-"<< max_index-1 << "]: ";
    cin >> k;
    k = abs(k) % max_index; // Простой способ избежать выхода за границы массива
 
    int max_i = 0, max_j = 0;
 
    // Поиск максимального числа по модулю
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (abs(A[i][j]) > abs(A[max_i][max_j])) {
                max_i = i;
                max_j = j;
            }
        }
    }
    cout << "Max: A[" << max_i << "][" << max_j << "]=" << A[max_i][max_j] << "\nk=" << k << endl;
 
    // Перемещение столбцов и строк
    if (max_i < k || max_i > k) {
        for (int j = 0, temp; j < m; j++) {
            temp = A[k][j];
            A[k][j] = A[max_i][j];
            A[max_i][j] = temp;
        }
    }
 
    if (max_j < k || max_j > k) {
        for (int i = 0, temp; i < n; i++) {
            temp = A[i][k];
            A[i][k] = A[i][max_j];
            A[i][max_j] = temp;
        }
    }
    //---------------------------------
 
    // Вывод матрицы
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << A[i][j] << '\t';
        }
        cout << endl;
    }
 
    return 0;
}
Результат:
Код
-3	-19	-19	-23	-16	
14	-2	15	-20	-11	
10	15	-19	-17	-17	
-22	-7	24	2	12	
-13	8	-15	23	-9	
Enter k[0-4]: 3
Max: A[3][2]=24
k=3
-3	-19	-23	-19	-16	
14	-2	-20	15	-11	
10	15	-17	-19	-17	
-22	-7	2	24	12	
-13	8	23	-15	-9
Если нужно перемещать строки и столбцы итератисно, то блок Перемещение столбцов и строк можно заменить на следующий код:
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
         while (max_i != k) {
                if (max_i < k) {
                        for (int j = 0, temp; j < m; j++) {
                                temp = A[max_i+1][j];
                                A[max_i+1][j] = A[max_i][j];
                                A[max_i][j] = temp;
                        }
                        max_i++;
                }
                else {
                        for (int j = 0, temp; j < m; j++) {
                                temp = A[max_i-1][j];
                                A[max_i-1][j] = A[max_i][j];
                                A[max_i][j] = temp;
                        }
                        max_i--;
                }
        }
        
        while (max_j != k) {
                if (max_j < k) {
                        for (int i = 0, temp; i < n; i++) {
                                temp = A[i][max_j+1];
                                A[i][max_j+1] = A[i][max_j];
                                A[i][max_j] = temp;
                        }
                        max_j++;
                }
                else {
                        for (int i = 0, temp; i < n; i++) {
                                temp = A[i][max_j-1];
                                A[i][max_j-1] = A[i][max_j];
                                A[i][max_j] = temp;
                        }
                        max_j--;
                }
        }
Yandex
Объявления
15.11.2011, 14:12     [C++] Задача на матрицу
Ответ Создать тему
Опции темы

Текущее время: 00:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru