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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
#1

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

03.05.2011, 14:15. Просмотров 3850. Ответов 14
Метки нет (Все метки)

Здравствуйте, помогите в решении вопроса.
Я делал. Но сейчас что-то не могу разобраться

Что мне исправить, чтобы мне выводило только правильно? Мне нужно посчитать максимальный элемент в каждой строке и вывести его и его индексы.
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;
      }
    }
  }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 14:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти максимальный элемент в строке матрицы (C++):

Найти максимальный элемент в заданной строке матрицы - C++
задана матрица. написать функцию, в которую передаешь номер строки, а она ищет в этой строке максимальный элемент

Найти максимальный элемент в каждой строке матрицы - C++
найти максимальный элемент в каждой строке матрицы и заменить его числом 1.Оформить в виде функции.

Найти максимальный элемент в каждой строке матрицы - C++
написать функцию

Найти в каждой строке матрицы максимальный элемент - C++
не получается вывести максимальный элемент. Помогите пожалуйста #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Найти в каждой строке матрицы максимальный элемент - C++
Дано массив А . Нужно найти с каждой строки максимальный элемент , с каждого столбца минимальный элемент

Найти максимальный элемент в каждой строке матрицы - C++
Дана прямоугольная матрица. Найти максимальный элемент в каждой строке. Сформировать массив из найденных элементов.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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;
}
0
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;
}
Этот код ищет по всему массиву.
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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;
}
0
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
03.05.2011, 14:48  [ТС] #5
Цитата Сообщение от mimicria Посмотреть сообщение
А Вам по половине надо?

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

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

Этот код ищет по всему массиву.
Нет. Вывод на экран - после каждой строки.
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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;
}
1
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 минут
Теперь такая задача:
В первой строке ищем максимальный элемент, а в каждой последующей ищешь максимальный элемент, не превышающий предпоследний.
0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
03.05.2011, 15:31 #9
C++
1
if ((MAS[i][j] > max) && (MAS[i][j] <= MAS[i][Column - 1])) max = MAS[i][j];
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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;
}
1
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
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;
}
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
03.05.2011, 15:58 #12
Цитата Сообщение от neske Посмотреть сообщение
mimicria, я ваш код вообще разобрать не смог.
Это не страшно, вылечат всех

Добавлено через 3 минуты
а в каждой последующей ищешь максимальный элемент, не превышающий предпоследний найденный максимальный.
Я так задание понял
1
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
03.05.2011, 16:05 #13
Да, это я задание прочитал невнимательно.
И на счет кода, так все-таки лучше не делать:
C++
1
int prev_max=99999;
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
03.05.2011, 16:08 #14
Цитата Сообщение от neske Посмотреть сообщение
И на счет кода, так все-таки лучше не делать:
C++
1
int prev_max=99999;
За это мне стыдно, но думать как обойти не хотелось
0
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;
}
Мой код максимально прост.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 21:33
Привет! Вот еще темы с ответами:

Найти сумму элементов в строке содержащий максимальный элемент матрицы - C++
Здравствуйте. Помогите пожалуйста решить задачу: Дана прямоугольная матрица разм. 3х4. Найти сумму элементов в строке содержащий...

Найти максимальный и минимальный элемент в каждой строке матрицы и поменять их местами - C++
Дана матрица вещественных чисел N х М. Количество строк N и столбцов М задается пользователем. Найти максимальный и минимальный элемент в...

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

В каждой строке матрицы найти максимальный элемент и заменить его на противоположный - C++
Помогите подправить задачку в каждой строке найти максимальный элемент и заменить его на противоположный работает не совсем верно,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.05.2011, 21:33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru