Как найти столбец с наименьшей суммой элементов

#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

Алексей Новиков's user avatar

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

Harry's user avatar

HarryHarry

214k15 золотых знаков117 серебряных знаков229 бронзовых знаков

как в матрице найти номер столбца с минимальной суммой элементов, питон



Знаток

(296),
закрыт



3 года назад

Victor Surozhtsev

Просветленный

(28109)


3 года назад

#Если матрица А [M][N], то так:
max=0.0; ind=[]
for k in range(N): max+=A[0][k]
for k in range(1,M):
~~s=0.0
~~for l in range(N): s+=A[k][l]
~~if s > max: ind=[]; ind.append(k)
~~elif s==max: ind.append(k)
#Так в числовой матрице находятся все индексы строк с максимальной суммой элементов. Таких строк может быть от одной до M – вот зачем нужен список индексов ind. А обычный номер всегда больше индекса на единицу, так как индексы нумеруются с нуля.

// Задача 59: Задайте двумерный массив из целых чисел. Напишите программу, которая удалит строку и столбец, на пересечении которых расположен наименьший элемент массива. // Например, задан массив: // 1 4 7 2 // 5 9 2 3 // 8 4 2 4 // 5 2 6 7 // Наименьший элемент – 1, на выходе получим // следующий массив: // 9 4 2 // 2 2 6 // 3 4 7 Console.Clear(); Console.WriteLine($”Задача 59: Задайте двумерный массив из целых чисел. Напишите программу, которая удалит строку и столбец, на пересечении которых расположен наименьший элемент массива.”); Console.WriteLine($”nВведите размер массива m x n и диапазон случайных значений:”); int m = InputNumbers(“Введите m: “); int n = InputNumbers(“Введите n: “); int range = InputNumbers(“Введите диапазон: от 1 до “); int[,] array = new int[m, n]; CreateArray(array); WriteArray(array); int[,] positionSmallElement = new int[1, 2]; positionSmallElement = FindPositionSmallElement(array, positionSmallElement); Console.Write($”Позиция элемента: n”); WriteArray(positionSmallElement); int[,] arrayWithoutLines = new int[array.GetLength(0) – 1, array.GetLength(1) – 1]; DeleteLines(array, positionSmallElement, arrayWithoutLines); Console.WriteLine($”nПолучившийся массив:”); WriteArray(arrayWithoutLines); int InputNumbers(string input) { Console.Write(input); int output = Convert.ToInt32(Console.ReadLine()); return output; } void CreateArray(int[,] array) { for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { array[i, j] = new Random().Next(range); } } } void WriteArray(int[,] array) { for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { Console.Write(array[i, j] + ” “); } Console.WriteLine(); } } int[,] FindPositionSmallElement(int[,] array, int[,] position) { int temp = array[0, 0]; for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { if (array[i, j] <= temp) { position[0, 0] = i; position[0, 1] = j; temp = array[i, j]; } } } Console.WriteLine($”nMинимальный элемент: {temp}”); return position; } void DeleteLines(int[,] array, int[,] positionSmallElement, int[,] arrayWithoutLines) { int k = 0, l = 0; for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { if (positionSmallElement[0, 0] != i && positionSmallElement[0, 1] != j) { arrayWithoutLines[k, l] = array[i, j]; l++; } } l = 0; if (positionSmallElement[0, 0] != i) { k++; } } }

Рассмотрим
принцип обмена между элементами массива.

Пример
1.
Поменять местами в каждой строке матрицы
максимальный
элемент и элемент, расположенный на
главной диагонали:

Выполним
замену значений
элементов в матрице

.

Графическая
схема алгоритма замены значений в
матрице представлена на рис. 13.1.

На
основании графической схемы

алгоритма
(см. рис. 13.1) разработан

программный
код:

Option Explicit

Sub
PR1()

Dim
i As Integer, j As Integer
Dim N As Integer, m As Integer

Dim C As Integer, ,
max As Integer

Dim k As Integer, p As Integer

Dim
a(1 To 3, 1 To 3) As Integer

‘ нумерация
с единицы

N
= 3: m
= 3

For
i = 1 To N

For
j = 1 To m

a(i,
j) = Cells(i, j) ‘считывание
A i,j

с
рабочего
листа
Excel

Next
i

For
i = 1 To N

max
= -32768

For
j = 1 To m

If
a(i, j) > max Then max = a(i, j): k = i: p = j

замена
элементов

Next j

C
= a(k, p)

a(k,
p) = a(i, i)

a(i,
i) = C

Next i

For
i = 1 To N

For j = 1 To m

Cells(i
+ 5, j) = a(i, j) ‘вывод
массива

на
лист
Excel

Next
j

Next
i

End
Sub

Пр и м е р 2. Найти строку
сминимальным
значением суммы элементов двумерного
массива:

.

Все
суммы строк элементов записать в
одномерный массив.

Графическая
схема алгоритма поиска строки с
минимальным
значением суммы элементов представлена
на рис. 13.2, на основании которой разработан
программный
код PR2
формирования одномерного массива из
минимальных
значений
сумм
элементов строк матрицы:

Option
Explicit

Sub PR2 ( )

Dim
M
As
Integer,
k, As
Integer

Dim
i
As
Integer,
j
As
Integer

Dim
min Аs
Integer, N
As
Integer

Dim A(1 To 10, 1 To 10) As
Integer

Dim
S(1 to 10) As Integer

N =3: M = 3 : min = 32767

For i = 1 To N

For
j = 1 To M

A(i, j) = Cells(i, j)‘ считывание
A(i, j)

‘с рабочего листа Excel

Nextj

Next
i

For i = 1 To N

S(i) = 0

For j = 1 To M

S(i)
= S(i) + A(i, j )

Next
j

Next
i

For i = 1 To N

Cells(i+5,
5) =S(i)
‘вывод элементов массива

If
S(i) <= min Then min = S(i): k = i

Nexti

Cells(5,11) =k‘вывод номера строкиcминимальным значением

суммы элементов

Cells(6,11) =min‘вывод минимальной суммы на рабочий
листExcel

EndSub

13.2. Индивидуальные задания

Задание
1. Задать массив
А(5, 5) с помощью генератора случайных
чисел в интервале [– 10; 40]. Разработать
ГСА и программный код обработки двумерного
массива согласно своему варианту (табл.
13.1), результаты обработки массива вывести
на рабочий лист Excel
с пояснениями.

Таблица
13.1

Задание по обработке
двумерного массива

Номер
варианта

Задание

1

2

1

Поменять
местами максимальные элементы, стоящие
на главной и побочной диагоналях

2

Вычислить
и запомнить сумму и количество
положительных элементов каждого
столбца матрицы. Результаты вычисления
вывести на экран в виде двух строк

3

Для
целочисленной матрицы найти для
каждой строки количество элементов,
значения которых кратны пяти и
наибольший из полученных результатов

4

Найти
в каждой строке матрицы максимальный
и минимальный элементы и поместить
их на место первого и последнего
элемента строки соответственно

5

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

Окончание
табл.13.1

1

2

6

Найти
в каждой строке наибольший элемент,
поменять его и элемент главной
диагонали местами

7

Найти
строки с наибольшим и наименьшим
значением суммы элементов. Вывести
на печать найденные строки и суммы
их элементов

8

Поменять
местами значения наибольшего и
наименьшего элементов матрицы каждого
столбца

9

Поменять
местами значения элементов двумерного
массива, симметричных относительно
главной диагонали

10

Найти
номер столбца двумерного массива,
для которого среднеарифметическое
значение его элементов минимально

11

В
двумерном массиве заменить все
элементы, меньшие значения суммы
элементов первой строки, этой суммой

12

Задать
матрицу с помощью генератора случайных
чисел, находящихся в интервале [5; 20].
Найти столбец с минимальным значением
произведения элементов

13

Задан
двумерный массив. Для каждого столбца
выяснить, имеются ли в нем нечетные
элементы и элементы, большие некоторого
числа d.
Результат вывести на лист Excel
c
пояснениями

14

В
двумерном массиве для каждого столбца
найти: а) сумму нечетных элементов;
б) количество положительных элементов;
в) коли-
чество элементов, значения
которых кратны пяти

Задание
2. Создать массив С(6, 6) с помощью генератора
случайных чисел в интервале [–20; 60].

Сформировать
одномерный массив из элементов созданного
двумерного массива по признаку, указанному
в задании (выбирается согласно своему
варианту). Разработать
ГСА и программный код формирования
одномерного массива
и вывести
массив на рабочий лист Excel:

1)
из элементов четных строк, расположенных
над
главной диагональю;

2)
из четных элементов побочной диагонали;

3)
из элементов, значения которых кратны
трем и которые расположены под
главной диагональю;

4)
каждый элемент, которого равен количеству
элементов соответствующего столбца,
больших числа n;

5)
каждый элемент, которого равен сумме
положительных элементов соответствующего
столбца;

6)
все его положительные элементы записать
в один одномерный массив, а остальные
– в другой;

7)
каждый элемент, которого равен количеству
нечетных отрицательных элементов
соответствующего столбца;

8)
каждый элемент, которого равен сумме
элементов соответствующей строки,
меньших числа n;

9)
каждый элемент, которого равен сумме
положительных элементов соответствующей
строки, кратных четырем или пяти;

10)
все его четные элементы записать в один
одномерный массив, а нечетные – в другой;

11)
из элементов, значения которых больше
10 и которые расположены над
побочной диагональю;

12)
каждый элемент, которого равен количеству
положительных элементов соответствующей
строки, кратных трем или семи;

13)
из положительных элементов, значение
которых кратны пяти;

14)
из элементов, максимальных по модулю,
в каждой строке;

15)
из отрицательных элементов, расположенных
под
побочной
диаго-налью.

Лабораторная
работа 14

Соседние файлы в папке Лаб. работы по VBA

  • #
  • #
  • #
  • #

Знакомство с языком программирования С#: Задайте прямоугольный двумерный массив. Напишите программу, которая будет находить строку с наименьшей суммой элементов

На чтение 3 мин Просмотров 509 Опубликовано 09.03.2023
Обновлено 09.03.2023

Задача: Задайте прямоугольный двумерный массив. Напишите программу, которая будет находить строку с наименьшей суммой элементов.

Содержание

  1. Пример:
  2. Решение:
  3. Пояснение:

Пример:

1 4 7 2
5 9 2 3
8 4 2 4
5 2 6 7

Программа считает сумму элементов в каждой строке и выдаёт номер строки с наименьшей
суммой элементов: 1 строка.

Решение:

Console.Write(«Введите размерность m массива: «);
int m = Convert.ToInt32(Console.ReadLine());
Console.Write(«Введите размерность n массива: «);
int n = Convert.ToInt32(Console.ReadLine());
int[,] randomArray = new int[m,n];

void mas(int m, int n)
{
int i,j;
Random rand = new Random();
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
randomArray[i,j] = rand.Next(1,9);
}
}
}

void printm(int[,] array)
{
int i,j;
for (i = 0; i < array.GetLength(0); i++)
{
Console.WriteLine();
for (j = 0; j < array.GetLength(1); j++)
{
Console.Write($»{array[i,j]} «);
}
Console.WriteLine();
}
}

mas(m,n);
Console.WriteLine(«nИсходный массив: «);
printm(randomArray);

// Функция, считающая сумму элементов в строке
int SumLine(int[,] array, int i)
{
int sum = array[i,0];
for (int j = 1; j < array.GetLength(1); j++)
{
sum += array[i,j];
}
return sum;
}

int minSum = 1;
int sum = SumLine(randomArray, 0);
for (int i = 1; i < randomArray.GetLength(0); i++)
{
if (sum > SumLine(randomArray, i))
{
sum = SumLine(randomArray, i);
minSum = i+1;
}
}
Console.WriteLine($»nСтрока c наименьшей суммой элементов: {minSum}»);

Пояснение:

Решение надо просто разбить на функцию — SumLine, которая считает сумму элементов в одной стоке и цикл For, который перебирает все строки и находит номер строки, где наименьшая сумма элементов.

Похожий код:

Avatar photo

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Добавить комментарий