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

Найти 3 наибольших элемента матрицы - C++

Восстановить пароль Регистрация
 
Mishania
77 / 77 / 33
Регистрация: 26.09.2012
Сообщений: 341
12.10.2012, 15:29     Найти 3 наибольших элемента матрицы #1
Помогите, пожалуйста, написать программу на С++ для нахождения в матрице 3х3 трех наибольших элементов и вывод их на экран в окошки Edit. Спасибо.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mishania
77 / 77 / 33
Регистрация: 26.09.2012
Сообщений: 341
15.10.2012, 15:17  [ТС]     Найти 3 наибольших элемента матрицы #2
Неужели никто не может помочь?
Арсенал
144 / 66 / 6
Регистрация: 30.12.2011
Сообщений: 137
15.10.2012, 16:01     Найти 3 наибольших элемента матрицы #3
Mishania,

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
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
 
using namespace std;
  
int main()
{
    const int ROWS = 3;
    const int COLS = 3;
 
    int maxArr[ROWS] = {0};
 
    int arr[ROWS][COLS] = {{7, 2, 3}, {4, 8, 6}, {1, 5, 9}};
 
    vector<int> v;
 
    for (int i=0; i<ROWS; ++i)
        for (int j=0; j<COLS; ++j)
            v.push_back(arr[i][j]);
 
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
 
    sort(v.begin(), v.end());
    cout << endl;
 
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
 
    for (int i=0; i<ROWS; ++i)
    {
        maxArr[i] = v.back();
        v.pop_back();
    }
    cout << endl;
 
     for (int i=0; i<ROWS; ++i)
        cout << maxArr[i] << " ";
 
    cin.get();
 
    return 0;
}
klimenko
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 17
15.10.2012, 16:09     Найти 3 наибольших элемента матрицы #4
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
#include <iostream>
#include <conio.h>
using namespace std;
 
void main()
{
    int a[3][3];
    int b, c, d;
    int i, j;
 
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            cout << "enter: ";
            cin >> a[i][j];
        }
    }
    b = a[0][0];
    c = a[0][0];
    d = a[0][0];
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(b<a[i][j])
            {
                b=a[i][j];
            }
        }
    }
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(c<a[i][j] && b!=a[i][j])
            {
                c=a[i][j];
            }
        }
    }
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(d<a[i][j] && b!=a[i][j] && c!=a[i][j])
            {
                d=a[i][j];
            }
        }
    }
    cout << b << " " << c << " " << d;
    getch();
}
Mihey_A
12 / 12 / 2
Регистрация: 02.07.2012
Сообщений: 61
15.10.2012, 16:23     Найти 3 наибольших элемента матрицы #5
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
#include<iostream>
#include<time.h>
#include<vector>
using namespace std;
int main()
{
    srand(time(0));
    int mas[3][3];
    vector<int> vec;
 
    for(int x=0; x<3; x++)
    {
        for(int y=0; y<3; y++)
        {
            vec.push_back(mas[x][y]=rand());
        }
    }
    sort(vec.begin(), vec.end());
    int x;
    cout << "Vvedite kol-vo elementov: " << endl;
    cin >> x;
    for(int i=x; i>0; i--)
    {
        cout << vec[i] << endl;
    }
    system("pause");
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.10.2012, 19:33     Найти 3 наибольших элемента матрицы #6
Арсенал, а если в матрице ROW больше 3-х?
klimenko, а если в матрице есть одинаковые элементы?
Mihey_A, у Вас выводит наоборот - x самых меньших элементов.
Кто напишет код определяющий за один проход все три максимальных числа добавлю отзывом всю свою силу репутации )
Арсенал
144 / 66 / 6
Регистрация: 30.12.2011
Сообщений: 137
15.10.2012, 19:50     Найти 3 наибольших элемента матрицы #7
valeriikozlov, ТС написал задание

Цитата Сообщение от Mishania Посмотреть сообщение
... для нахождения в матрице 3х3 трех наибольших элементов и вывод их на экран в окошки Edit. Спасибо.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.10.2012, 19:57     Найти 3 наибольших элемента матрицы #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Арсенал Посмотреть сообщение
ТС написал задание
извиняюсь не заметил, но мое условие в силе: без сортировки, за один проход найти три максимальных числа.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2012, 21:36     Найти 3 наибольших элемента матрицы #9
Если максимальные элементы должны быть попарно различны, например в 1, 2, 2, 3 три максимальных элемента это 1, 2, 3, то так

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
#include<iostream>
const int N = 3;
 
void Max(int *a, int n, int &max1, int &max2, int &max3)
{
   int i, min;
   for(i = 1, min = a[0]; i < n; i++)
      if (a[i] < min)
         min = a[i];
   max1 = max2 = max3 = min;
   for(i = 0; i < n; i++)
      if (a[i] > max1)
      {
          max3 = max2;
          max2 = max1;
          max1 = a[i];
      }
      else if (a[i] < max1 && a[i] > max2)
      {
          max3 = max2;
          max2 = a[i];
      }
      else if (a[i] < max2 && a[i] > max3)
         max3 = a[i];
 
}
 
int main()
{
   int max1, max2, max3, a[N][N] = {{1,2,3}, {4,5,6}, {1,4,5}};
   Max(*a, N*N, max1, max2, max3);
   std::cout << max3 << "\n";
   std::cout << max2 << "\n";
   std::cout << max1 << "\n";
   return 0;
}
А если могут повторяться ( в том примере: 2, 2,3), то

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
#include<iostream>
 
const int N = 3;
 
void Max(int *a, int n, int &max1, int &max2, int &max3)
{
   int i;
   max1 = max2 = max3 = a[0];
   for(i = 0; i < n; i++)
      if (a[i] >= max1)
      {
          max3 = max2;
          max2 = max1;
          max1 = a[i];
      }
      else if (a[i] < max1 && a[i] >= max2)
      {
          max3 = max2;
          max2 = a[i];
      }
      else if (a[i] < max2 && a[i] > max3)
         max3 = a[i];
 
}
 
int main()
{
   int max1, max2, max3, a[N][N] = {{1,2,3}, {4,5,6}, {1,4,5}};
   Max(*a, N*N, max1, max2, max3);
   std::cout << max3 << "\n";
   std::cout << max2 << "\n";
   std::cout << max1 << "\n";
   return 0;
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
15.10.2012, 23:22     Найти 3 наибольших элемента матрицы #10
Thinker, мне кажется, что в 18 и 23 строках (прога1) и в 16 и 21 строках (прога2) лишние проверки
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.10.2012, 06:12     Найти 3 наибольших элемента матрицы #11
Цитата Сообщение от Thinker Посмотреть сообщение
А если могут повторяться ( в том примере: 2, 2,3), то
я именно для этого варианта и хотел бы увидеть код.

Цитата Сообщение от Thinker Посмотреть сообщение
max1 = max2 = max3 = a[0];
это изначально неправильно. Допустим имеем массив:
9 8 8 7 6 5 4 3 2 1 (т.е. самый максимальный элемент имеет 0-вой индекс)
В конце поиска результат будет:
9 9 9.
А должен быть:
9 8 8.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.10.2012, 11:46     Найти 3 наибольших элемента матрицы #12
valeriikozlov, да, поспешил. Можно так
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
#include<iostream>
const int N = 3;
 
void Max(int *a, int n, int &max1, int &max2, int &max3)
{
   int i, min;
   for(i = 1, min = a[0]; i < n; i++)
      if (a[i] < min)
         min = a[i];
   max1 = max2 = max3 = min;
   for(i = 0; i < n; i++)
      if (a[i] >= max1)
      {
          max3 = max2;
          max2 = max1;
          max1 = a[i];
      }
      else if (a[i] < max1 && a[i] >= max2)
      {
          max3 = max2;
          max2 = a[i];
      }
      else if (a[i] < max2 && a[i] > max3)
         max3 = a[i];
 
}
 
int main()
{
   int max1, max2, max3, a[N][N] = {{1,2,3}, {4,5,6}, {1,4,5}};
   Max(*a, N*N, max1, max2, max3);
   std::cout << max3 << "\n";
   std::cout << max2 << "\n";
   std::cout << max1 << "\n";
   return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от I.M. Посмотреть сообщение
Thinker, мне кажется, что в 18 и 23 строках (прога1) и в 16 и 21 строках (прога2) лишние проверки
совсем нет, очень даже нужные)
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
16.10.2012, 18:40     Найти 3 наибольших элемента матрицы #13
Thinker, я думаю он имел вот эти подвыражения:
C++
1
2
a[i] < max1
a[i] < max2
и вроде был прав...
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.10.2012, 21:23     Найти 3 наибольших элемента матрицы #14
Цитата Сообщение от ZoRT Посмотреть сообщение
Thinker, я думаю он имел вот эти подвыражения:
C++
1
2
a[i] < max1
a[i] < max2
и вроде был прав...
да, точно, не надо. В первом алгоритме эти сравнения обязательны, когда максимальные элементы должны быть различными. А второй алгоритм я просто скопировал и немного подправил. Спасибо за замечание, что-то невнимательно второй алгоритм написал , он правильный, просто лишние проверки. Но еще раз повторю, что в первом алгоритме они обязательны)

Цитата Сообщение от valeriikozlov Посмотреть сообщение
я именно для этого варианта и хотел бы увидеть код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Max(int *a, int n, int &max1, int &max2, int &max3)
{
   int i;
   max1 = a[0];
   max2 = a[1];
   max3 = a[2];
   for(i = 0; i < n; i++)
      if (a[i] >= max1)
      {
          max3 = max2;
          max2 = max1;
          max1 = a[i];
      }
      else if (a[i] >= max2)
      {
          max3 = max2;
          max2 = a[i];
      }
      else if (a[i] > max3)
         max3 = a[i];
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 21:30     Найти 3 наибольших элемента матрицы
Еще ссылки по теме:

C++ найти три наибольших элемента в массиве
Дан целочисленный массив. Найти 2 наибольших элемента C++
C++ Найти три наибольших элемента из набора и вывести их в порядке убывания

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.10.2012, 21:30     Найти 3 наибольших элемента матрицы #15
Thinker, тут уже не докапаешься )

Не по теме:

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

Yandex
Объявления
16.10.2012, 21:30     Найти 3 наибольших элемента матрицы
Ответ Создать тему
Опции темы

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