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

Найти максимальный элемент в строке матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
Visary_Master
 Аватар для Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
03.05.2011, 14:15     Найти максимальный элемент в строке матрицы #1
Здравствуйте, помогите в решении вопроса.
Я делал. Но сейчас что-то не могу разобраться

Что мне исправить, чтобы мне выводило только правильно? Мне нужно посчитать максимальный элемент в каждой строке и вывести его и его индексы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int maxElement = 0;
  int maxi = 0; 
  int maxj = 0;
 
  maxElement = mass[0][0];
  
  for (int i=0; i<N; i++)
  {  
    for (int j=0; j<N; j++)
    {
      if (mass[i][j] >= maxElement)
      {  
        maxElement = mass[i][j];
        maxi = i;
        maxj = j;
        cout << maxElement << endl;
        cout << maxi << " " << maxj << endl;
      }
    }
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 14:15     Найти максимальный элемент в строке матрицы
Посмотрите здесь:

C++ Найти максимальный элемент в каждой строке матрицы
C++ Найти сумму элементов в строке содержащий максимальный элемент матрицы
C++ Найти максимальный элемент в каждой строке матрицы
Найти максимальный элемент в каждой строке матрицы C++
C++ Дана Матрица А(5.4) 1)Найти одномерный массив В из сумм элементов каждой строки матрицы 2)найти максимальный элемент матрицы А в 5-ой строке 3)Заме
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
03.05.2011, 14:25     Найти максимальный элемент в строке матрицы #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int maxElement = 0;
  int maxi = 0; 
  int maxj = 0;
 
  maxElement = mass[0][0];
  
  for (int i=0; i<N; i++)
  {  
    for (int j=0; j<N; j++)
    {
      if (mass[i][j] >= maxElement)
      {  
        maxElement = mass[i][j];
        maxi = i;
        maxj = j;
      }
    }
 cout << maxElement << endl;
 cout << maxi << " " << maxj << endl;
}
Visary_Master
 Аватар для Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
03.05.2011, 14:36  [ТС]     Найти максимальный элемент в строке матрицы #3
Надо в каждой строке чтобы искал эл-т и запоминал его индексы. Простите что сразу не написал.

Добавлено через 1 минуту
Цитата Сообщение от mimicria Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int maxElement = 0;
  int maxi = 0; 
  int maxj = 0;
 
  maxElement = mass[0][0];
  
  for (int i=0; i<N; i++)
  {  
    for (int j=0; j<N; j++)
    {
      if (mass[i][j] >= maxElement)
      {  
        maxElement = mass[i][j];
        maxi = i;
        maxj = j;
      }
    }
 cout << maxElement << endl;
 cout << maxi << " " << maxj << endl;
}
Этот код ищет по всему массиву.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
03.05.2011, 14:43     Найти максимальный элемент в строке матрицы #4
Цитата Сообщение от Visary_Master Посмотреть сообщение
Этот код ищет по всему массиву.
А Вам по половине надо?

Как вариант: под строкой вы какой индекс массива имеете ввиду? Можно местами поменять:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int maxElement = 0;
  int maxi = 0; 
  int maxj = 0;
 
  maxElement = mass[0][0];
  
  for (int i=0; i<N; i++)
  {  
    for (int j=0; j<N; j++)
    {
      if (mass[j][i] >= maxElement)
      {  
        maxElement = mass[j][i];
        maxi = i;
        maxj = j;
      }
    }
 cout << maxElement << endl;
 cout << maxi << " " << maxj << endl;
}
Visary_Master
 Аватар для Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
03.05.2011, 14:48  [ТС]     Найти максимальный элемент в строке матрицы #5
Цитата Сообщение от mimicria Посмотреть сообщение
А Вам по половине надо?

Как вариант: под строкой вы какой индекс массива имеете ввиду? Можно местами поменять:
Мы находим макс. элемент, и запоминаем его индексы i и j.

Есть двумерный массив. Ищем в каждой строке этого массива максимальный элемент, и выводим его индекс.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 14:54     Найти максимальный элемент в строке матрицы #6
Цитата Сообщение от Visary_Master Посмотреть сообщение
Надо в каждой строке чтобы искал эл-т и запоминал его индексы. Простите что сразу не написал.

Этот код ищет по всему массиву.
Нет. Вывод на экран - после каждой строки.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
03.05.2011, 14:56     Найти максимальный элемент в строке матрицы #7
Цитата Сообщение от Visary_Master Посмотреть сообщение
Мы находим макс. элемент, и запоминаем его индексы i и j.

Есть двумерный массив. Ищем в каждой строке этого массива максимальный элемент, и выводим его индекс.
Ах, ну да. В каждой новой строке максимум надо обнулить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int maxElement = 0;
  int maxi = 0; 
  int maxj = 0;
 
  maxElement = mass[0][0];
  
  for (int i=0; i<N; i++)
  {  
    for (int j=0; j<N; j++)
    {
      if (mass[j][i] >= maxElement)
      {  
        maxElement = mass[j][i];
        maxi = i;
        maxj = j;
      }
    }
 cout << maxElement << endl;
 cout << maxi << " " << maxj << endl;
 maxElement = 0;
}
Visary_Master
 Аватар для Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
03.05.2011, 15:29  [ТС]     Найти максимальный элемент в строке матрицы #8
Решено! Я нашел свою ошибку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        int maxElement = 0;
    int maxi = 0; 
    int maxj = 0;
 
    maxElement = mass[0][0];
    
    for (int i=0; i<N; i++)
    {   
        for (int j=0; j<N; j++)
        {
            if (mass[i][j] >= maxElement)
            {   
                maxElement = mass[i][j];
                maxi = i;
                maxj = j;
            }
        }
        cout << maxElement << endl;
        cout << maxi << " " << maxj << endl;
        // maxElement = 0;  
    }
Все дело в строке, которая сейчас за комментирована. Если значение maxElement не обнулять то когда у нас найдется максимальный элемент всей матрицы, а мы еще не дошли до самой нижней строки, то у нас не будет искаться максимальный элемент строки матрицы дальше так как он уже найден.
Хм... глупая ошибка так то.
Вы опередили меня в написании.

Добавлено через 30 минут
Теперь такая задача:
В первой строке ищем максимальный элемент, а в каждой последующей ищешь максимальный элемент, не превышающий предпоследний.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.05.2011, 15:31     Найти максимальный элемент в строке матрицы #9
C++
1
if ((MAS[i][j] > max) && (MAS[i][j] <= MAS[i][Column - 1])) max = MAS[i][j];
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
03.05.2011, 15:47     Найти максимальный элемент в строке матрицы #10
Теперь такая задача:
В первой строке ищем максимальный элемент, а в каждой последующей ищешь максимальный элемент, не превышающий предпоследний.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int maxElement = 0;
  int maxi = 0; 
  int maxj = 0;
  int prev_max=99999;
  maxElement = mass[0][0];
  
  for (int i=0; i<N; i++)
  {  
    for (int j=0; j<N; j++)
    {
      if ((mass[j][i] >= maxElement)&&(mass[j][i]<=prev_max))
      {  
        maxElement = mass[j][i];
        maxi = i;
        maxj = j;
      }
    }
 cout << maxElement << endl;
 cout << maxi << " " << maxj << endl;
 prev_max=maxElement;
 maxElement = 0;
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.05.2011, 15:52     Найти максимальный элемент в строке матрицы #11
mimicria, я ваш код вообще разобрать не смог.
C++
1
2
3
4
5
6
7
8
 for (int i = 0; i < Row; i++) {
    int max = MAS[i][0];
    for (int j = 1; j < Column; j++) {
        if ((!i) && (MAS[i][j] > max)) max = MAS[i][j];
        if ((i) && (MAS[i][j] > max) && (MAS[i][j] <= MAS[i][Column - 1])) max = MAS[i][j];
    }
    std::cout << i << " max: " << max;
}
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
03.05.2011, 15:58     Найти максимальный элемент в строке матрицы #12
Цитата Сообщение от neske Посмотреть сообщение
mimicria, я ваш код вообще разобрать не смог.
Это не страшно, вылечат всех

Добавлено через 3 минуты
а в каждой последующей ищешь максимальный элемент, не превышающий предпоследний найденный максимальный.
Я так задание понял
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.05.2011, 16:05     Найти максимальный элемент в строке матрицы #13
Да, это я задание прочитал невнимательно.
И на счет кода, так все-таки лучше не делать:
C++
1
int prev_max=99999;
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
03.05.2011, 16:08     Найти максимальный элемент в строке матрицы #14
Цитата Сообщение от neske Посмотреть сообщение
И на счет кода, так все-таки лучше не делать:
C++
1
int prev_max=99999;
За это мне стыдно, но думать как обойти не хотелось
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 21:33     Найти максимальный элемент в строке матрицы
Еще ссылки по теме:

C++ В каждой строке матрицы найти максимальный элемент и заменить его на противоположный
Найти максимальный элемент матрицы и минимальное значение в строке где он находится C++

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

Или воспользуйтесь поиском по форуму:
Visary_Master
 Аватар для Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
03.05.2011, 21:33  [ТС]     Найти максимальный элемент в строке матрицы #15
Нужно решить такую задачу. Немного я не правильно разъяснил. Потому что уже долго сижу и голова не варит. Я решаю такую задачу:
Задан двумерный массив N x N. Разрешается произвольно переставлять элементы внутри любого столбца. Про-верить, можно ли выполнив конечное количество перестановок в столбцах, расположить на побочной диагональ элементы так, чтобы он возрастали.

Я думаю что на правильном пути, надо еще реализовать перестановку элементов в столбце. И алгоритм будет примерно такой:
искать надо будет по столбцам...тогда... и еще надо... я запутался.

Вот весь код программы.
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
#include <iostream>
#include <ctime>
using namespace std;
 
const int N = 3;
 
int findMaxElement(int mass[N][N], int);
int main() 
{       
    int mass[N][N];
    srand(time(NULL));
    for (int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            mass[i][j] = rand() % 100;
        }
    }
    for (int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            cout << mass[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
    
    int maxElement = 0;
    int maxi = 0; 
    int maxj = 0;
    int prev_max=99999;
 
    maxElement = mass[0][0];
    
    for (int i=0; i<N; i++)
    {   
        for (int j=0; j<N; j++)
        {
            if ((mass[j][i] >= maxElement) && (mass[j][i] <= prev_max))
            {   
                maxElement = mass[i][j];
                maxi = i;
                maxj = j;
            }
        }
        // для проверки
        cout << maxElement << endl;
        cout << maxi << " " << maxj << endl;
        cout << maxElement << endl;
 
        int temp = mass[maxi][maxj];
        mass[maxi][maxj] = mass[i][N - 1 - i];
        mass[i][N - 1 - i] = temp;
 
        prev_max=maxElement;
        //cout << prev_max; // для проверки
        maxElement = 0;
        
    }
    cout << endl;
    for (int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            cout << mass[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от neske Посмотреть сообщение
mimicria, я ваш код вообще разобрать не смог.
C++
1
2
3
4
5
6
7
8
 for (int i = 0; i < Row; i++) {
    int max = MAS[i][0];
    for (int j = 1; j < Column; j++) {
        if ((!i) && (MAS[i][j] > max)) max = MAS[i][j];
        if ((i) && (MAS[i][j] > max) && (MAS[i][j] <= MAS[i][Column - 1])) max = MAS[i][j];
    }
    std::cout << i << " max: " << max;
}
Мой код максимально прост.
Yandex
Объявления
03.05.2011, 21:33     Найти максимальный элемент в строке матрицы
Ответ Создать тему
Опции темы

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