Как найти минимальный элемент главной диагонали

#include <iostream>

using namespace std;

int main() {
  int n, m;
  int a[500][500], min = a[0][0];
  cin >> n;

  //Ввод массива
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cin >> a[i][j];
    }
  }
  min = a[0][0];
  //Поиск минимума
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (a[j][j] > min) {
             min = a[j][j];
        }
    }
  }

  cout << min;
  return 0;
}

ТарасПрогер's user avatar

ТарасПрогер

2,2691 золотой знак5 серебряных знаков26 бронзовых знаков

задан 5 апр 2022 в 15:47

Даниил Шаронов's user avatar

Вы собираетесь ввести четверть миллиона чисел с клавиатуры? Или генерируйте эти числа, или берите поскромнее размер массива. Не нужно использовать лишние объекты и не нужен никакой вложенный цикл для проверки элементов только главной диагонали. Все очень просто:

const int n = 5;
int a[n][n];
//Ввод массива
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        cin >> a[i][j];
    }
}    
//Поиск минимума
int min = a[0][0];

for (int j = 1; j < n; j++) 
    if (a[j][j] < min) 
            min = a[j][j];  

cout << min;  

ответ дан 5 апр 2022 в 19:42

AR Hovsepyan's user avatar

AR HovsepyanAR Hovsepyan

15.8k3 золотых знака13 серебряных знаков30 бронзовых знаков

Добавьте условие проверки на нахождение на главной диагонали и объявляйте минимальный элемент после ввода массива

#include <iostream>

using namespace std;

int main() {
  int n, m;
  int a[500][500], min = a[0][0];
  cin >> n;

  //Ввод массива
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cin >> a[i][j];
    }
  }
  min = a[0][0];
  //Поиск минимума
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (a[j][j] < min && i == j) {
             min = a[j][j];
        }
    }
  }

  cout << min;
  return 0;
}

vanesicks's user avatar

vanesicks

4684 серебряных знака15 бронзовых знаков

ответ дан 5 апр 2022 в 16:10

CameL's user avatar

CameLCameL

1,0943 серебряных знака15 бронзовых знаков

6

#include <numeric>
#include <iostream>
using namespace std;

int main() 
{ 
    constexpr size_t size = 4; // этапа компиляции
    int arr[size][size];

    for (size_t i = 0; i < size; i++)
    {
        for (size_t j = 0; j < size; j++)
        {
            cin >> arr[i][j];
        }
    }
    

    int min = numeric_limits<int>::max(); // макс. значение int'а
    size_t j = 0;
    for (size_t i = 0; i < size; i++)
    { 
        if (arr[i][j] <= min)
            min = arr[i][j];
        j++; // сдвиг по row
    }

    cout << min << endl;
}

ответ дан 5 апр 2022 в 16:11

ТарасПрогер's user avatar

ТарасПрогерТарасПрогер

2,2691 золотой знак5 серебряных знаков26 бронзовых знаков

1

3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

1

Найти минимальный элемент на главной диагонали матрицы

04.10.2010, 22:20. Показов 22411. Ответов 24


Студворк — интернет-сервис помощи студентам

Найти минимальный элемент на главной диагонали матрицы



0



ForEveR

В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

04.10.2010, 22:22

2

shyrik2014,

C++
1
2
3
4
5
6
7
int min=Arr[0][0];
for(int i=0, int j=0; i<n, j<m; ++i, ++j)
{
    if(Arr[i][j]<min)
       min=Arr[i][j];
}
std::cout<<min<<'n';

При условии что матрица квадратная.



0



shyrik2014

3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

04.10.2010, 22:51

 [ТС]

3

Цитата
Сообщение от Lavroff
Посмотреть сообщение

shyrik2014,

C++
1
2
3
4
5
6
7
int min=Arr[0][0];
for(int i=0, int j=0; i<n, j<m; ++i, ++j)
{
    if(Arr[i][j]<min)
       min=Arr[i][j];
}
std::cout<<min<<'n';

При условии что матрица квадратная.

а как это выглядит на чистом С?



0



ForEveR

В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

04.10.2010, 22:54

4

shyrik2014,

C
1
2
3
4
5
6
7
8
int min=Arr[0][0];
int i, j;
for(i=0, j=0; i<n, j<m; ++i, ++j)
{
    if(Arr[i][j]<min)
        min=Arr[i][j];
}
printf("Min: %dn", min);



0



shyrik2014

3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

04.10.2010, 23:06

 [ТС]

5

Цитата
Сообщение от Lavroff
Посмотреть сообщение

shyrik2014,

C
1
2
3
4
5
6
7
8
int min=Arr[0][0];
int i, j;
for(i=0, j=0; i<n, j<m; ++i, ++j)
{
    if(Arr[i][j]<min)
        min=Arr[i][j];
}
printf("Min: %dn", min);

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



0



ForEveR

В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

04.10.2010, 23:12

6

shyrik2014,

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
srand((unsigned)(time(NULL)));
int i, j;
int**Arr;
int n;
printf("Enter n: ");
scanf("%d", &n);
Arr=(int**)(malloc(n*sizeof(int*)));
for(i=0; i<n; ++i)
    Arr[i]=(int*)(malloc(n*sizeof(int)));
for(i=0; i<n; ++i)
{
   for(j=0; j<n; ++j)
   {
       Arr[i][j]=(rand()%100)+1;
   }
}
for(i=0; i<n; ++i)
{
    for(j=0; j<n; ++j)
    {
         printf("%d ", Arr[i][j]);
    }
    printf("n");
}
int min=Arr[0][0];
for(i=0, j=0; i<n, j<n; ++i, ++j)
{
    if(Arr[i][j]<min)
        min=Arr[i][j];
}
printf("Min: %dn", min);
for(int i=0; i<n; ++i)
free(Arr[i]);
free(Arr);
return 0;
}



0



fasked

Эксперт С++

5038 / 2617 / 241

Регистрация: 07.10.2009

Сообщений: 4,310

Записей в блоге: 1

04.10.2010, 23:20

7

Lavroff, в цикле нахождения минимума счетчик j не нужен, диагональ то одна

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
#include <stdio.h>
#include <stdlib.h>
 
#define ROWS 5
#define COLS 5
 
int main()
{
    int i = 0;
    int j = 0;
    int min = 0;
    int matrix[ROWS][COLS];
 
    for(i = 0; i < ROWS; ++i) {
        for(j = 0; j < COLS; ++j)
            matrix[i][j] = rand() % 99;
    }
    
    min = matrix[0][0];
    for(i = 0; i < ROWS && i < COLS; ++i) {
        if(min > matrix[i][i])
            min = matrix[i][i];
    }
    
    for(i = 0; i < ROWS; ++i) {
        for(j = 0; j < COLS; ++j)
            printf("%.2d ", matrix[i][j]);
        printf("n");
    }
    
    printf("minimum on main diagonal is %dn", min);
    return 0;
}



1



В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

04.10.2010, 23:25

8

fasked, М. Да) Согласен



0



3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

04.10.2010, 23:31

 [ТС]

9

fasked, а можно более компактнее и попроще сделать программу?



0



В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

04.10.2010, 23:33

10

shyrik2014, Куда ж еще проще-то? О_о
Ну можно матрицу не выводить… А может вообще переписать все в одну строчку, если так нужна «компактность»



0



Эксперт С++

5038 / 2617 / 241

Регистрация: 07.10.2009

Сообщений: 4,310

Записей в блоге: 1

04.10.2010, 23:35

11

shyrik2014, здесь как бе итак то всего три цикла, из которых два это заполнение и вывод матрицы и только один функциональный %)



1



3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

04.10.2010, 23:37

 [ТС]

12

fasked, если нельзя, то есть пару вопросов по этому коду #define rows,cols объявляем вначале, а потом используем их в матрице, что это такое поясните?



0



В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

04.10.2010, 23:38

13

А как насчет того, чтобы их задать?



0



3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

04.10.2010, 23:46

 [ТС]

14

Lavroff, выше задал вопрос



0



В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

04.10.2010, 23:48

15

shyrik2014, Макросы. Фактически константы.
При встрече в тексте компилятор заменяет их на определения. Т.е.
#define rows 5

rows будет заменена на 5.



0



3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

04.10.2010, 23:57

 [ТС]

16

Lavroff, matrix[i][j] = rand() % 99; а что означает это?



0



В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

05.10.2010, 00:04

17

shyrik2014, Генерация псевдо-случайного числа от 0 до 99… И запись в его [i][j] элемент матрицы



0



3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

05.10.2010, 00:12

 [ТС]

18

Цитата
Сообщение от Lavroff
Посмотреть сообщение

shyrik2014, Генерация псевдо-случайного числа от 0 до 99… И запись в его [i][j] элемент матрицы

На этой строке компилятор выдаёт ошибку Function «rand» should have a prototype



0



ForEveR

В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

05.10.2010, 00:15

19

shyrik2014, Какая IDE?
ЗЫ

C
1
#include <stdlib.h>

Есть в коде?



1



shyrik2014

3 / 3 / 2

Регистрация: 31.10.2009

Сообщений: 112

05.10.2010, 00:45

 [ТС]

20

Цитата
Сообщение от Lavroff
Посмотреть сообщение

shyrik2014, Какая IDE?
ЗЫ

C
1
#include <stdlib.h>

Есть в коде?

Да спасибо, помогло

Добавлено через 5 минут
Lavroff, программа выдала полный хаос, как лечить?

Добавлено через 2 минуты
ВОт этот хаос:

Миниатюры

Найти минимальный элемент на главной диагонали матрицы
 



0



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

// main_secondary_diagonal.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

int main(int argc, char* argv[])
{
    srand(time(NULL));
    int size_array; // размер квадратной матрицы
    setlocale(LC_ALL, "rus");

    cout << "Введите размер квадратной матрицы: ";
    cin >> size_array;

    // динамическое создание двумерного массива
    int **arrayPtr = new int* [size_array];
    for (int count = 0; count < size_array; count++)
        arrayPtr[count] = new int [size_array];

    for (int counter_rows = 0; counter_rows < size_array; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < size_array; counter_columns++)
        {
            arrayPtr[counter_rows][counter_columns] = rand() % 100; // заполнение массива случайными числами
            cout << setw(2) << arrayPtr[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
        }
        cout << endl;
    }
    cout << endl;

    int min = arrayPtr[1][0], // минимальный елемент массива, ниже главной диагонали
        row_min = 1,          // номер строки минимального элемента
        column_min = 0;       // номер столбца минимального элемента

    // поиск минимального элемента в массиве, ниже главной диагонали
    for (int counter_rows = 1; counter_rows < size_array; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < counter_rows ; counter_columns++)
        {
            if ( arrayPtr[counter_rows][counter_columns] < min )
            {
                min = arrayPtr[counter_rows][counter_columns];
                row_min = counter_rows;
                column_min = counter_columns;
            }
        }
    }

    cout << "min" << "[" << (row_min + 1) << "][" << (column_min + 1) << "]"  << " = " << min << endl; 

    int max = arrayPtr[0][0], // максимальный элемнет массива, выше побочной диагонали
        row_max = 0,              // номер строки максимального элемента
        column_max = 0;           // номер столбца максимального элемента

    for (int counter_rows = 0; counter_rows < size_array - 1; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < (size_array - counter_rows - 1); counter_columns++)
        {
            if ( arrayPtr[counter_rows][counter_columns] > max )
            {
                max = arrayPtr[counter_rows][counter_columns];
                row_max = counter_rows;
                column_max = counter_columns;
            }
        }
    }

    cout << "max" << "[" << (row_max + 1) << "][" << (column_max + 1) << "]"  << " = " << max << endl; 

    //////////////////перестановка элементов////////////////////////////////////////////////

    arrayPtr[row_min][column_min] = max;
    arrayPtr[row_max][column_max] = min;

    ////////////////////////////////////////////////////////////////////////////////////////

    cout << "nМассив после перестановки максимального и минимального элементов:n";

    for (int counter_rows = 0; counter_rows < size_array; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < size_array; counter_columns++)
        {
          cout << setw(2) << arrayPtr[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
        }
        cout << endl;
    }
    cout << endl;

    cout << "min" << "[" << (row_max + 1) << "][" << (column_max + 1) << "]"  << " = " << min << endl; 
    cout << "max" << "[" << (row_min + 1) << "][" << (column_min + 1) << "]"  << " = " << max << endl; 

    // удаление двумерного динамического массива
    for (int count = 0; count < size_array; count++)
        delete []arrayPtr[count];

    system("pause");
    return 0;
}

Результат работы программы показан ниже:

Вопрос от пользователя:

Питон. Дана квадратная матрица A порядка M. Найти минимальный элемент для
каждой ее диагонали, параллельной главной (начиная с одноэлементной
диагонали A1,M).

Подождите!

Не закрывайте страницу. Нейросеть пишет ответ. Он появится тут.

Этот ответ написан нейросетью.

Искуственный интеллект во многом преуспевает, но в некоторых областях может давать неточные ответы.
Если вам не понравился ответ, попробуйте задать его более развёрнуто и конкретно, используя точные параметры.

Ответ нейросети:

В Python для решения данной задачи необходимо написать функцию, которая получает в качестве аргументов квадратную матрицу A порядка M и возвращает список минимальных элементов для каждой диагонали, параллельной главной.

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

Код функции будет выглядеть следующим образом:

def min_parallel_diag(A):

    result = [] #список для хранения минимальных элементов    

    for i in range(M-1): #начинаем с одноэлементной диагонали A1,M

        diag = [] #список для хранения элементов диагонали

        for j in range(M-i): #перебираем элементы диагонали

            diag.append(A[j+i][j]) #добавляем элементы диагонали в список

        result.append(min(diag)) #находим минимальный элемент и добавляем в список результатов

    return result

Для того, чтобы ознакомиться с работой функции, можно создать квадратную матрицу и вызвать функцию:

A = [[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]]



print(min_parallel_diag(A)) #выводим результат работы функции

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

[16, 11, 6, 1, 2, 3, 4, 5, 10, 15, 20, 25]

Таким образом, задача решена и можно использовать функцию для любых квадратных матриц порядка M.

⚠️Зарепортить пост!

Чтобы оставить комментарий, необходимо авторизоваться.

Задай любой вопрос нейросети!

она справится с любой поставленной задачей быстрее чем поиск в Яндекс.

Для того, чтобы задать вопрос нейросети, необходимо войти на сайт.

Последние вопросы

(c) ChatGPT по русски 2023. Все права защищены. При обнаружении неправомерного контента пишите на [email protected]

uses crt;
Type arr=array[1..50,1..50] of integer;
 
procedure InputMatrix(var ar:arr; var n:byte);
var i,j:byte;
begin
Randomize;
repeat
Write('n=');
Readln(n);
until n in [1..50];
for i:=1 to n do
for j:=1 to n do
 ar[i,j]:=random(20)-10;
end;
 
procedure DiagSumMinMatrix(a:arr; n:byte);
var i,j,tmpj:byte;
    k,sum,min:integer;
begin
min:=1;
for i:=1 to n do
for j:=1 to n do
 if (i=j) and (a[i,j]<min) then
  begin
   min:=a[i,j];
   tmpj:=j;
  end;
Writeln('Min ',min,' [',tmpj,']');
sum:=0;
for i:=1 to n do
 sum:=sum+a[i,tmpj];
k:=0;
for i:=1 to n do
 if a[i,tmpj]<0 then
  inc(k);
Writeln('Sum ',sum);
Writeln('Kol(otr) ',k);
end;
 
procedure OutputMatrix(var ar:arr; n:byte);
var i,j:byte;
begin
Writeln('Matrix A');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    Write(ar[i,j]:4);
   end;
  Writeln;
 end;
end;
 
var a:arr;
    i,j,x:byte;
begin
ClrScr;
InputMatrix(a,x);
OutputMatrix(a,x);
Writeln;
DiagSumMinMatrix(a,x);
Readln;
end.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти среднюю оценку в excel
  • Как найти блок читом
  • Как исправить вино которое ушло в уксус
  • Diskette drive a error как исправить
  • Как найти первоначальную длину маятника

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии