0 / 0 / 1
Регистрация: 11.11.2015
Сообщений: 16
1

В целочисленной матрице поменять местами столбец с минимальной суммой со столбцом с максимальной суммой

30.12.2015, 18:34. Показов 1980. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана прямоугольная матрица nxm целых чисел (n,m<10 – ввод с клавиатуры, значения элементов массива в диапазоне [a, b] – вводятся случайным образом, a и b вводятся с клавиатуры). Вывести на экран исходную матрицу. Поменять местами столбец с минимальной суммой со столбцом с максимальной суммой. Реализовать задачу через функции. Вывести на экран преобразованную матрицу
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.12.2015, 18:34
Ответы с готовыми решениями:

В заданной матрице поменять строку с минимальной суммой со строкой с максимальной суммой
помогите с кодом

В матрице поменять местами столбец с минимальной суммой со столбцом с максимальной
Дана прямоугольная матрица n x m целых чисел. Поменять местами столбец с минимальной суммой со...

Массив: В произвольно заданной матрице размера 4*6 определить строку с максимальной суммой элементов и столбец с минимальной суммой.
В произвольно заданной матрице размера 4*6 определить строку с максимальной суммой элементов и...

Двумерный массив: поменять местами столбец с минимальной суммой элементов столбца с первым столбцом массива
3. Дан двумерный массив размером n x m. Поменять местами столбец с минимальной суммой элементов...

3
7 / 7 / 5
Регистрация: 27.07.2011
Сообщений: 32
30.12.2015, 23:28 2
Посмотрите. Если есть вопросы, спрашивайте.
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# include <iostream>
#include <ctime>
using namespace std;
void init(int** Mas, int n, int m);
void print(int** Mas, int n, int m);
void solution(int** Mas, int n, int m);
int main()
{
    int n, m;
    do{
        cout << "Vvedi n, m <10 :";
        cin >> n >> m;
    } while (n > 9 || m > 9 || n < 1 || m < 1);
    //задание двумерного массива
    int** Mas = new int *[n];
    for (int i = 0; i < n; ++i)
        Mas[i] = new int[m];
    init(Mas, n, m);
    print(Mas, n, m);
    solution(Mas, n, m);
    cout << "New:\n";
    print(Mas, n, m);
 
    delete[]Mas;
    return 0;
 
}
 
void init(int** Mas, int n, int m){
    int a, b;
    cout << "a:";
    cin >> a;
    cout << "\nb:";
    cin >> b;
    srand(time(0)); // автоматическая рандомизация
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++)
            // формула генерации случайных чисел по заданному диапазону
            Mas[i][j] = a+ rand() % b;
    }
    system("cls");
}
 
void print(int** Mas, int n, int m){
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
        cout << Mas[i][j] << " ";
        if (j == m - 1) cout<<"\n";
    }
}
}
 
void solution(int** Mas, int n, int m){
    int sum=0, sum_Min=0, sum_Max=0, iMin=0, iMax=0;
 
    int* tmpSum = new int [n];
    //записываем суммы столбцов в массив
    for (int j = 0; j< m; j++){
        for (int i = 0; i< n; i++){
            sum = sum + Mas[i][j];
            if (i == n - 1){
                tmpSum[j] = sum;
                sum = 0;
            }
        }
    }
 
    //ищем в каком из столбцов суммы были меньшей и наибольшей
    sum_Max = tmpSum[0];
    sum_Min = tmpSum[0];
 
    for (int i = 0; i < m; i++){
        if (tmpSum[i] < sum_Min){
            iMin = i;
            sum_Min = tmpSum[i];
        }
        if (tmpSum[i] > sum_Max){
            iMax = i;
            sum_Max = tmpSum[i];
        }
    }
 
    // переставляем 
    for (int i = 0; i < n; i++){
        swap(Mas[i][iMin], Mas[i][iMax]);
        }
 
    delete []tmpSum;
}
0
92 / 11 / 10
Регистрация: 09.12.2015
Сообщений: 30
30.12.2015, 23:47 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
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
80
81
82
#include <iostream>
#include <ctime>
using namespace std;
void fillMatrix(int **matrix, int n, int m);
void showMatrix(int **matrix, int n, int m);
void sortMatrix(int **matrix, int n, int m);
 
 
void main() 
{
    srand(time(NULL));
    int n, m;
    do {
        cout << "Input the number of lines: ";
        cin >> n;
        cout << "Input the number of columns: ";
        cin >> m;
    
        } while ((n >= 10) || (m >= 10));
    
    
    int **matrix = new int*[n];
    for (int i = 0; i < n; i++) matrix[i] = new int[m];
    
    fillMatrix(matrix, n, m);
    showMatrix(matrix, n, m);
    sortMatrix(matrix, n, m);
    showMatrix(matrix, n, m);
 
 
    for (int i = 0; i < n; i++) delete[] matrix[i];
    delete[] matrix;
    system("pause");
}
 
void fillMatrix(int **matrix, int n, int m)
{
    int a, b;
    cout << "Input a: ";
    cin >> a;
    cout << "Input b: ";
    cin >> b;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) matrix[i][j] = rand() % (b - a + 1) + a;
}
void showMatrix(int **matrix, int n, int m)
{
    cout << "Matrix: " << endl<<endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++) cout << matrix[i][j] << "  ";
        cout << endl<<endl;
    }
}
void sortMatrix(int **matrix, int n, int m)
{
        
    int sum_min=0, sum_max = 0, in_min=0, in_max=0; //in_min, in_max - индексы столбцов
    for (int i = 0; i < n; i++) {
                                    sum_min += matrix[i][0];
                                    sum_max += matrix[i][0];
                                }
    
    for (int j = 0; j < m; j++) {
                                        int sum=0;
                                        for (int i = 0; i < n; i++) sum += matrix[i][j];
                                        if (sum > sum_max) {
                                                                sum_max = sum;
                                                                in_max = j;
                                                           }
                                        if (sum < sum_min) {
                                                                sum_min = sum;
                                                                in_min = j;
                                                           }
                                    }
    cout << in_min + 1 << " is the column of min sum"<<endl;
    cout << in_max + 1 << " is the column of max sum"<<endl;
    
    for (int i = 0; i < n; i++) swap(matrix[i][in_min], matrix[i][in_max]);
                                
 
}
0
Любитель чаепитий
3744 / 1800 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
31.12.2015, 00:03 4
Veronika988, Если я всё правильно понял.
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
#include <iostream>
#include <random>
#include <ctime>
#include <conio.h>
 
using namespace std;
 
int n, k;
 
void print( int** );
void swapm( int**, int, int );
void sum( int**, int&, int& );
 
 
int main() {
    mt19937 gen.seed( time( nullptr ) );
    uniform_int_distribution<int> dist( -100, 100 );
    int a, b;
    do cin >> n >> k;
    while( n > 10 || k > 10 || n < 1 || k < 1 );
    int arr[n][k];
    int sum[n];
    for( int i = 0; i < n; i++ )
        for( int j = 0; j < n; j++ )
            cin >> arr[i][j];
    cin >> a >> b;
    for( int i = a; i < b; i++ ) {
        arr[i/k][i-k*(i/k)] = dist( gen );
    }
    print( arr );
    int min = 0, max = 0;
    sum( arr, min, max );
    swapm( arr, min, max );
    print( arr );
    getch();
    return 0;
}
 
void print( int** arr ) {
    for( const auto& i : n ) {
        for( const auto& j : k ) {
            cout << arr[i][j];
        }
        cout << endl;
    }
}
 
void swapm( int** arr, int min, int max ) {
    for( int i = 0; i < k; i++ )
        swap( arr[min][i], arr[max][i] );
    cout << endl;
}
 
void sum( int** arr, int& min, int& max ) {
    for( const auto& i : n ) {
        for( const auto& j : k ) {
            sum[i] += arr[i][j];
        }
    }
    int min = 0, max = 0;
    for( int i = 0; i < n; i++ ) {
        if( summ[i] < summ[min] ) min = i;
        if( summ[i] > summ[max] ) max = i;
    }
}
0
31.12.2015, 00:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2015, 00:03
Помогаю со студенческими работами здесь

В матрице поменять местами строки с максимальной и минимальной суммой элементов
Помогите плиз. Заданы 2 матрицы действительных чисел размером 5х6 и 8х7. В матрице поменять...

В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой
Нам задали написать 2 различные проги для такого задания В двумерном массиве поменять местами...

В заданной целочисленной матрице найти столбец с минимальной суммой элементов
Среди столбцов заданной целочисленной матрицы, включающие только такие элементы, которые по модулю...

В матрице X найти строку с минимальной и столбец с максимальной суммой элементов
Спасайте!Не могу решить(( Дана матрица X размерности nXm.В матрице X найти строку с минимальной и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru