0 / 0 / 0 Регистрация: 18.03.2013 Сообщений: 75 |
|
1 |
|
Найти столбец матрицы с минимальной суммой элементов22.04.2013, 17:56. Показов 9067. Ответов 4
дано двумерный массив целых чисел найти столбик с минимальной суммой элементов
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
22.04.2013, 17:56 |
4 |
BumerangSP 4299 / 1421 / 463 Регистрация: 16.12.2010 Сообщений: 2,939 Записей в блоге: 3 |
||||
22.04.2013, 19:24 |
2 |
|||
Заполняете массив, а после пишите следующее:
0 |
BodyRockSam 0 / 0 / 0 Регистрация: 01.04.2013 Сообщений: 2 |
||||
24.04.2013, 12:45 |
3 |
|||
Как вариант.
0 |
Olivеr 414 / 410 / 95 Регистрация: 06.10.2011 Сообщений: 832 |
||||
13.05.2013, 20:59 |
4 |
|||
0 |
Genn55 413 / 250 / 118 Регистрация: 26.12.2012 Сообщений: 786 |
||||
14.05.2013, 02:12 |
5 |
|||
0 |
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int N, M, summ, min = 0;
cout << "Введите размер матрицы: n";
cin >> N >> M;
int** A = new int* [N];
for (int i = 0; i < N; i++)
A[i] = new int[M];
cout << "Введите значения матрицы: n";
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++) {
printf("nA[%d][%d] = ", i, j);
cin >> A[i][j];
}
cout << "Вот Ваша матрица:" << endl << endl;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
cout << A[i][j] << " ";
cout << endl;
}
cout << "nИскомые суммы в столбцах:" << endl;
for (int j = 0; j < M; j++)
{
summ = 0;
for (int i = 0; i < N; i++)
{
if (A[i][j] >= 0) summ += A[i][j];
}
cout << "Cтолбец №" << j + 1 << ": " << summ << endl;
}
}
Должно вывести «Минимальный столбец этой суммы: 1»
задан 7 июн 2022 в 19:47
2
cout << "nИскомые суммы в столбцах:" << endl;
int min_idx = 0, min_sum = INT_MAX;
for (int j = 0; j < M; j++)
{
summ = 0;
for (int i = 0; i < N; i++)
{
if (A[i][j] >= 0) summ += A[i][j];
}
if (min_sum > summ) min_idx = j;
cout << "Cтолбец №" << j + 1 << ": " << summ << endl;
}
cout << "Минимальный столбец этой суммы: " << min_idx << endl;
ответ дан 8 июн 2022 в 5:06
HarryHarry
214k15 золотых знаков117 серебряных знаков229 бронзовых знаков
Сумма элементов столбцов матрицы
Задача
Вариант 1. Вычислить сумму элементов каждого столбца матрицы (двумерного массива).
Вариант 2. Найти сумму элементов определенного столбца матрицы.
Похожие задачи
Решение
Матрицу можно представить как массив, в который вложены другие массивы. Эти другие массивы имеют одинаковую длину (например, M), а количество этих вложенных массивов — другое число (например, N). Так, если M = 7, а N = 5, то это значит, что матрица состоит из 5 одномерных массивов, в каждом из которых по 7 элементов.
Элементы одного вложенного массива обычно считают строкой матрицы. Столбцы же матрицы формируют элементы разных вложенных массивов, но имеющие в них одинаковые индексы (занимающие одинаковые позиции). Так, все первые элементы вложенных массивов, формируют первый столбец матрицы. Элементы с индексом 2 образуют второй столбец.
Если mat — это переменная-матрица, то выражение mat[i,j] обозначает обращение к элементу, имеющему номер строки i (это номер вложенного массива), и номер столбца j (это номер самого элемента во вложенном массиве).
Обычно матрицы заполняются по-строчно: во внешнем цикле перебираются строки, во внутреннем — элементы строк (формируют столбцы). Однако это не обязательно. Заполнять можно и по столбцам: во внешнем цикле перебирать столбцы, во внутреннем — обращаться к элементам разных вложенных массивов, но имеющих идентичный индекс.
В программе ниже заполнение двумерного массива происходит по-строчно (стандартно), затем вычисляется сумма элементов каждого столбца, и здесь обход происходит по столбцам. Обратите внимание, что в данном случае внешний цикл отсчитывает до M, а внутренний — до N. В разных итерациях вложенного цикла различна первая переменная-индекс (в данном случае i), обозначающая номер строки, а столбец остается постоянным.
Пример выполнения кода программы:
Когда поставлена задача нахождения суммы элементов только определенного столбца, то она решается проще, без вложенного цикла. Вместо переменной j используется конкретное число, обозначающее столбец, сумму которого следует посчитать. Например, для вычисления суммы элементов третьего столбца код будет таким:
Задания к лабораторной работе 3
Лабораторная работа 2.
Тема: Векторы и матрицы
Цель: научить создавать векторы и матрицы разными способами, производить с ними различные операции.
Общие сведения
Задачи линейной алгебры, решаемые в MathCAD, можно условно разделить на два класса. Первый ‑ это простейшие матричные операции, которые сводятся к определенным арифметическим действиям над элементами матрицы. Они реализованы в виде операторов и нескольких специфических функций, предназначенных для создания, объединения, сортировки, получения основных свойств матриц и т. д. Второй класс ‑ это более сложные действия, которые реализуют алгоритмы вычислительной линейной алгебры, такие как вычисление определителей и обращение матриц, вычисление собственных векторов и собственных значений, решение систем линейных алгебраических уравнений и различные матричные разложения.
Простейшие операции матричной алгебры реализованы в MathCAD в виде операторов, причем их запись максимально приближена к математическому значению. Каждый оператор выражается соответствующим символом. Некоторые операции применимы только к квадратным матрицам N ´ N, некоторые допускаются только для векторов (например, скалярное произведение), а другие, несмотря на одинаковое написание, по-разному действуют на векторы и матрицы.
Имеется два способа создать матрицу.
1-й способ. Использование команды создания массивов:
· Воспользоваться командой Вставка ® Матрица;
· нажатие клавиш Ctrl+M;
· выбор пиктограммы с изображением шаблона матрицы на панели инструментов Матрицы.
В диалоговом окне указать размерность матрицы, т. е. количество ее строк m (Rows) и столбцов n (Columns).
Для векторов один из этих параметров должен быть равен 1. При m = 1 получим вектор-столбец, а при n = 1- вектор-строку.
Далее на экране появится шаблон , в который нужно ввести значения элементов массива.
Обращаться к отдельным элементам вектора или матрицы можно используя нижний индекс. Для элемента матрицы указываются два индекса, один ‑ для номера строки, другой ‑ для номера столбца.
Чтобы ввести нижний индекс, нужно нажать клавишу [ после имени вектора или матрицы или выбрать команду на панели Матрицы.
2-й способ. Использование ранжированной переменной.
Ранжированная переменная используется для определения индекса (номера) элемента массива.
1) Создать матрицу В, состоящую из 2 строк и 3 столбцов.
2) Создать вектор S, состоящий из 3 элементов
Команды панели инструментов Матрицы
Кнопка | Назначение |
Создание матрицы | |
Обратная матрица | |
Определитель матрицы | |
Транспонирование матрицы | |
Выделение столбца матрицы |
Операторы для работы с массивами
Обозначения: для векторов ‑ V, для матриц ‑ М и для скалярных величин ‑ z.
Оператор | Ввод | Назначение оператора |
V1+V2 | V1+V2 | Сложение двух векторов V1 и V2 |
V1-V2 | V1-V2 | Вычитание двух векторовV1 и V2 |
-М | -М | Смена знака у элементов матрицы M |
V-z | V-z | Вычитание из вектора V скаляра z |
z*V, V*z | z*V, V*z | Умножение вектора V на скаляр z |
z*M, M*z | z*M, M*z | Умножение матрицы М на скаляр z |
V1*V2 | VI*V2 | Умножение двух векторов V1 и V2 |
M*V | M*V | Умножение матрицы М на вектор V |
М1*М2 | М1*М2 | Умножение двух матриц М1 и М2 |
V/z | Деление вектора V на скаляр z | |
M/z | Деление матрицы М на скаляр z | |
М^n | Возведение матрицы М в степень п |
Фрагмент документа MathCAD:
Функции для работы с векторами и матрицами.
Некоторые из них (V должен быть вектором, A может быть вектором либо матрицей):
length(V) ‑возвращает число элементов в векторе v;
last(V) ‑ возвращает индекс последнего элемента;
max(A) ‑ возвращает максимальный по значению элемент;
min(A) ‑ возвращает минимальный по значению элемент.
Для работы с матрицами также существует ряд встроенных функций:
augment(M1, М2) ‑ объединяет в одну матрицы М1 и М2, имеющие одинаковое число строк;
identity(n) ‑ создает единичную квадратную матрицу размером , (n – размер матрицы(число));
stack(MI, M2) ‑ объединяет две матрицы М1 и M2, имеющие одинаковое число столбцов, сажая M1 над M2;
diag(V) ‑ создает диагональную матрицу, элемент главной диагонали которой ‑ вектор V;
cols(M) ‑ возвращает число столбцов матрицы М;
rows(M) ‑ возвращает число строк матрицы М;
rank(M) ‑возвращает ранг матрицы М;
tr(M) ‑ возвращает след (сумму диагональных элементов) квадратной матрицы М;
mean(M) ‑ возвращает среднее значение элементов массива М;
median(M) ‑ возвращает медиану элементов массива М;
eigenvals(M) ‑ возвращает вектор, элементами которого являются собственные значения матрицы M (M должна быть квадратной матрицей.);
submatrix(M,ir,jr,ic,jc) ‑ возвращает подмассив, состоящий из всех элементов, которые содержатся в строках с ir по jr и столбцах с ic по jc массива М.
Все матричные и векторные операторы допустимо использовать как в численных, так и в символьных расчетах. Мощь символьных операций заключается в возможности проводить их не только над конкретными числами, но и над переменными.
Фрагмент документа MathCAD:
Задания к лабораторной работе 3
1. Ввести в документ название лабораторной работы, вариант задания и фамилию студента
2. Создать квадратные матрицы А, В, D, размером (5,5,4 соответственно) первым способом
3. Исследовать следующие свойства матриц на примере преобразования заданных массивов:
· транспонированная матрица суммы двух матриц равна сумме транспонированных матриц (A+B) T =A T +B T ;
· транспонированная матрица произведения двух матриц равна сумме произведению транспонированных матриц, взятых в обратном порядке: (A*B) T =B T *A T ;
· при транспонировании квадратной матрицы определитель не меняется : |D|=|D T |;
· произведение квадратной матрицы на соответствующую ей квадратную дает единичную матрицу (элементы главной диагонали единичной матрицы равны 1, а все остальные – 0) D*D -1 =E.
4. Для матриц A,B найти обратные матрицы.
5. Найти определители матриц A,B.
6. Для матрицы А увеличить значения элементов в № раз, где № ‑ номер варианта.
7. Для матрицы В увеличить значения элементов на №.
8. Создать вектор C вторым способом, количество элементов которого равно 6.
9. Применить к матрицам А, В, D встроенные матричные функции (всевозможные) из приведенных в пункте “Функции для работы…..”
10. Применить к вектору С встроенные векторные функции.
11. Применить ко всем матрицам и вектору общие встроенные функции.
12. Сохранить документ.
1. Как создать матрицу, вектор ‑ строку, вектор ‑ столбец?
2. Какие операторы есть для работы с матрицами?
3. Перечислите команды панели инструментов Матрицы.
4. Как вставить матричные функции?
5. Как выполнять вычисления, если матрица задана в символьном виде?
Найти столбец матрицы с максимальной суммой элементов
Задана матрица неотрицательных чисел. Посчитать сумму элементов в каждом столбце. Определить, какой столбец содержит максимальную сумму.
Для решения данной задачи необходимо найти сумму элементов каждого столбца матрицы, после чего сравнить между собой суммы. При этом надо запомнить, какому столбцу принадлежит какая сумма.
Однако не будем сначала искать все суммы, а после выполнять сравнений. Вычислив сумму элементов очередного столбца, сравним ее со значением переменной, предназначенной для хранения максимальной суммы. Если текущая окажется больше, то запишем ее в указанную переменную. Кроме того, запомним в отдельной переменной номер текущего столбца.
Если сумма следующего столбца окажется больше, то снова перезапишем указанные переменные. Если же меньше или равна, то перезаписывать не будем.
Перебрав таким образом всю матрицу, мы найдем столбец с максимальной суммой элементов. Но только первый. Данный вариант решения задачи приводится в примерах кода ниже.
Если же в матрице содержится несколько столбцов с одинаковой максимальной суммой и все их надо определить, то задача решается немного по-другому. Сначала ищется максимум, при этом номер столбца запоминать не надо. После этого снова считаются суммы столбцов и при совпадении с ранее найденным максимальным значением номер столбца выводится на экран.
http://poisk-ru.ru/s10940t3.html
http://gospodaretsva.com/sum-col-max.html
const size = 4; {Размер матрицы. Можно изменить} type matrix = array [1..size, 1..size] of integer; function Sum(x: matrix; col: integer): integer; var i, s: integer; begin s := 0; for i := 1 to size do if x[i, col] > 0 then s := s + x[i, col]; Sum := s end; var a: matrix; i, j, min, jmin: integer; begin Randomize; min := MAXINT; for i := 1 to size do begin for j := 1 to size do begin a[i, j] := -50 + Random(101); Write(a[i, j]:6) end; WriteLn end; for i := 1 to size do if (Sum(a, i) < min) and (Sum(a, i) <> 0) then begin min := Sum(a, i); jmin := i end; WriteLn('Номер столбца с минимальной суммой положительных элементов = ', jmin, ' (Сумма = ', min, ')'); ReadLn end.
We can have an application for finding the lists with the minimum value and print it. This seems quite an easy task and may also be easy to code, but having shorthands to perform the same are always helpful as this kind of problem can come in web development.
Method #1 : Using reduce() + lambda The above two function can help us achieving this particular task. The lambda function does the task of logic and iteration and reduce function does the task of returning the required result. Works in python 2 only.
Python3
test_matrix
=
[[
1
,
3
,
1
], [
4
,
5
,
3
], [
1
,
2
,
4
]]
print
(
"The original matrix is : "
+
str
(test_matrix))
res
=
reduce
(
lambda
i, j: i
if
sum
(i) <
sum
(j)
else
j, test_matrix)
print
(
"Minimum sum row is : "
+
str
(res))
Output :
The original matrix is : [[1, 3, 1], [4, 5, 3], [1, 2, 4]] Minimum sum row is : [1, 3, 1]
Time complexity: O(m*n), because it performs the same number of iterations as the original code.
Auxiliary space: O(m*n) as well, because it creates a dictionary with m * n keys and a list of m * n elements
Method #2: Using min() + key The min function can get the minimum of all the list and key is used to specify on what the min condition has to be applied which is summation in this case.
Python3
test_matrix
=
[[
1
,
3
,
1
], [
4
,
5
,
3
], [
1
,
2
,
4
]]
print
(
"The original matrix is : "
+
str
(test_matrix))
res
=
min
(test_matrix, key
=
sum
)
print
(
"Minimum sum row is : "
+
str
(res))
Output :
The original matrix is : [[1, 3, 1], [4, 5, 3], [1, 2, 4]] Minimum sum row is : [1, 3, 1]
Time complexity: O(m*n), because it performs the same number of iterations as the original code.
Auxiliary space: O(m*n) as well, because it creates a dictionary with m * n keys and a list of m * n elements
Method #3 : Using sum(),extend(),sort() and index() methods
Python3
test_matrix
=
[[
1
,
3
,
1
], [
4
,
5
,
3
], [
1
,
2
,
4
]]
print
(
"The original matrix is : "
+
str
(test_matrix))
a
=
[]
for
i
in
test_matrix:
a.append(
sum
(i))
y
=
[]
y.extend(a)
y.sort()
res
=
test_matrix[a.index(y[
0
])]
print
(
"Minimum sum row is : "
+
str
(res))
Output
The original matrix is : [[1, 3, 1], [4, 5, 3], [1, 2, 4]] Minimum sum row is : [1, 3, 1]
Time complexity: O(m*n), because it performs the same number of iterations as the original code.
Auxiliary space: O(m*n) as well, because it creates a dictionary with m * n keys and a list of m * n elements
Method #4: Using numpy library
Note: Install numpy module using command “pip install numpy”
Python3
import
numpy as np
test_matrix
=
np.array([[
1
,
3
,
1
], [
4
,
5
,
3
], [
1
,
2
,
4
]])
print
(
"The original matrix is : n"
, test_matrix)
res
=
test_matrix[np.argmin(np.
sum
(test_matrix, axis
=
1
))]
print
(
"Minimum sum row is : "
, res)
Note: Install numpy module using command
"pip install numpy"
Output:
The original matrix is :
[[1 3 1]
[4 5 3]
[1 2 4]]
Minimum sum row is : [1 3 1]
The above code uses the numpy library to find the row with the minimum sum in the matrix. The argmin() function is used to find the index of the row with the minimum sum and the sum() function is used to calculate the sum of elements in each row. The axis parameter is set to 1 to calculate the sum of elements in each row. The result is then stored in the variable ‘res’. The time complexity is O(n) and Auxiliary space is O(1)
Last Updated :
17 Apr, 2023
Like Article
Save Article