Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 56

Определить максимальное из значений, встречающихся в заданной матрице более одного раза

30.01.2013, 00:27. Показов 2649. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Пытался решить данную задачу, но по ходу возник вопрос, как подсчитать максимальные значения которые встречаются именно более одного раза. Как найти максимальное значение написал, что требуется дописать или исправить что б решить задачу:

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
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    srand(time(NULL));
    
    const int n=3;
    const int m=4;
    int A[n][m];
    int x=0;
    int max=0;
    
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            A[i][j]=rand()%25;
            cout<<A[i][j]<<"\t";
        }
    }
    
    for(int i=0; i<n; i++)// перебираем отдельные строки
    {
        for(int j=0; j<m; j++)// 
        {
            if(A[i][j]>x)// ищим максимальное значение
                x=A[i][j];
        }
        max=x;
    }
 
    cout<<"\n\n";
 
    cout<<"Максимальное из значений, встречающихся в заданной матрице более одного раза: "<<max<<endl;
 
 
 
    system("pause");
За ранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2013, 00:27
Ответы с готовыми решениями:

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

Определить максимальное из чисел, встречающихся в заданной матрице более одного раза
Здравствуйте!Помогите пожалуйста решить задачу. Дана целочисленная матрица. Определить максимальное из чисел, встречающихся в заданной...

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

7
 Аватар для 3BEPb_TyTa
18 / 18 / 4
Регистрация: 18.05.2010
Сообщений: 83
30.01.2013, 00:57
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
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    srand(time(NULL));
    
    const int n=3;
    const int m=4;
    int A[n][m];
    
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            A[i][j]=rand()%25;
            cout<<A[i][j]<<"\t";
        }
    }
    
    int B[2][n*m];
    int BSize = 0;
    for(int i = 0; i < n*m; i++)
        B[1][i] = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            int k;
            for(k = 0; k < BSize; k++){
                if(A[i][j] == B[0][k]){
                    B[1][k]++;
                    break;
                }
            }
            if(!(k < BSize)){
                BSize++;
                B[0][k] = A[i][j];
            }
        }
    }
 
    int max = B[0][0];
    for(int i=1; i<BSize; i++)// перебираем отдельные строки
    {
        if(B[0][i] > max && B[1][i] > 0)
            max = B[0][i];
    }
    cout<<"\n\n";
    cout<<"Максимальное из значений, встречающихся в заданной матрице более одного раза: "<<max<<endl;
    system("pause");
}
вводим доп. массив B, в который записываем числа из массива А и кол-во их повторений. После ищем максимальный элемент уже в новом массиве.
1
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 56
30.01.2013, 01:18  [ТС]
Можете сказать про строку
C++
1
setlocale(LC_ALL, "Russian");
я так понял это, аналог строки
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
, или у нее есть кроме этого какие то функции?
И еще, есть способ как то сделать ваш код меньше по обьему, не внедряя ничего нового из возможностей c++?
0
 Аватар для 3BEPb_TyTa
18 / 18 / 4
Регистрация: 18.05.2010
Сообщений: 83
30.01.2013, 01:53
Цитата Сообщение от LiV Посмотреть сообщение
я так понял это, аналог строки
да
Цитата Сообщение от LiV Посмотреть сообщение
сделать ваш код меньше по обьему
быстрее - наверняка, хотя как - сходу не скажу. А меньше(всмысле кол-ва строк) если и можно, то не намного. Он и так невелик .
1
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 56
30.01.2013, 03:07  [ТС]
Черт... не могу разобраться с кодом на 100%, вот как я его понял , подскажите пожалуйста:

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
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    srand(time(NULL));
    
    const int n=3;
    const int m=4;
    int A[n][m];
    
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            A[i][j]=rand()%25;
            cout<<A[i][j]<<"\t";
        }
    }
    
    int B[2][n*m];// создаем массив размерностью [2][12]
    int BSize = 0;
    for(int i = 0; i < n*m; i++)// проход по массиву int B[2][n*m]
        B[1][i] = 0;
    for(int i = 0; i < n; i++){ // проход по массиву аналогичному int A[n][m]
        for(int j = 0; j < m; j++){
            int k; // переменная для проверки повторяющихся чисел
            for(k = 0; k < BSize; k++){ // здесь не понял BSize=0 же... 
                if(A[i][j] == B[0][k]){ // проверка повторяющихся чисел
                    B[1][k]++;// подсчет
                    break;
                }
            }
            if(!(k < BSize)){ // наверное сдесь замена максимального числа, если нашлось большее
                BSize++;
                B[0][k] = A[i][j];
            }
        }
    }
 
    int max = B[0][0];
    for(int i=1; i<BSize; i++)// перебираем отдельные строки
    {
        if(B[0][i] > max && B[1][i] > 0) //ищем максимальный элемент
            max = B[0][i];
    }
    cout<<"\n\n";
    cout<<"Максимальное из значений, встречающихся в заданной матрице более одного раза: "<<max<<endl;
    system("pause");
}
0
 Аватар для 3BEPb_TyTa
18 / 18 / 4
Регистрация: 18.05.2010
Сообщений: 83
30.01.2013, 15:03
Смысл массива B в том, что после его формирования (строки 27-45 в предыдущем ответе) он должен хранить в своей первой строчке какой-то элемент из массива А, а во второй строчке кол-во вхождений этого элемента.
Для этого мы перебираем все элементы массива А
C++
1
2
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){..}
и для каждого из этих элементов проверяем, есть ли он в В. Проверяем в цикле просматривая элементы В начиная с 0 до BSize-1. Если такой элемент находится, то в массиве В увеличивается число повторений.
C++
1
2
3
4
5
6
7
            int k; // переменная-счётчик для цикла ниже
            for(k = 0; k < BSize; k++){ 
                if(A[i][j] == B[0][k]){ // проверка повторяющихся чисел
                    B[1][k]++;// увеличение числа повторений
                    break;
                }
            }
переменная k объявляется вне цикла для того, чтобы после выхода она не уничтожалась. Если в предыдущем цикле не нашлось нужного элемента, то k будет равно BSize. В это случаем мы добавляем новый элемент в В(с индексом k) и увеличиваем BSize, чтобы в дальше поиск производился с учётом нового элемента.
C++
1
2
3
4
            if(!(k < BSize)){
                BSize++;
                B[0][k] = A[i][j]; 
            }
Только после завершения формирования массива В переходим к поиску максимального. Здесь я слегка изменил код(вчерашний некорректен). Для нахождения максимума в массиве В будем использовать переменную хранящую индекс столбца в В, в котором хранится текущий максимальный элемент(maxIndex). Этой переменной нужно присвоить начальное значение, равное первому элементу в массиве В, который встречается в А более одного раза. Также нужно учесть вариант, при котором ни один элемент А не повторяется. Для этого мы присваиваем maxIndex значение -1.(зачем - поясню чуть ниже).
В следующем фрагменте кода ищем первый элемент, встречающийся в А более одного раза(т.е. элемент в В, со значение больше нуля в второй строчке i-ого столбца), присваиваем индекс этого элемента переменной maxIndex и завершаем цикл.
C++
1
2
3
4
5
6
7
    int maxIndex = -1;
    for(int i = 0; i < BSize; i++){
        if(B[1][i] > 0){
            maxIndex = i;
            break;
        }
    }
Далее нужно завершить поиск максимального среди оставшихся повторяющихся элементов. Если в предыдущем цикле не удалось найти ни одного повторяющегося элемента, то значение переменно maxIndex останется равным -1(присвоенному при объявлении). Следовательно в этом случае никаких действий больше предпринимать не надо, а только сообщить о том, что элементов, которые бы повторялись не найдено вовсе.
Если же maxIndex не равна -1, то производим поиск по массиву В начиная со столбца с индексом maxIndex + 1.
C++
1
2
3
4
5
6
7
8
9
10
11
    if(maxIndex != -1){
        for(int i=maxIndex + 1; i<BSize; i++)
        {
            if(B[0][i] > B[0][maxIndex] && B[1][i] > 0) 
                maxIndex = i;
        }
        cout<<"\n\n";
        cout<<"Максимальное из значений, встречающихся в заданной матрице более одного раза: "<<B[0][maxIndex]<<endl;
    }
    else
        cout << "В матрице нет значений, встречающихся более одного раза" << endl;
Итого весь код целиком:
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
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    srand(time(NULL));
    
    const int n=3;
    const int m=4;
    int A[n][m];
    
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            A[i][j]=rand()%25;
            cout<<A[i][j]<<" ";
        }
    }
    cout << endl;
    
    int B[2][n*m];
    int BSize = 0;
    for(int i = 0; i < n*m; i++)
        B[1][i] = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            int k; 
            for(k = 0; k < BSize; k++){ 
                if(A[i][j] == B[0][k]){
                    B[1][k]++;
                    break;
                }
            }
            if(!(k < BSize)){
                BSize++;
                B[0][k] = A[i][j];
            }
        }
    }
 
    int maxIndex = -1;
    for(int i = 0; i < BSize; i++){
        if(B[1][i] > 0){
            maxIndex = i;
            break;
        }
    }
    if(maxIndex != -1){
        for(int i=maxIndex + 1; i<BSize; i++)
        {
            if(B[0][i] > B[0][maxIndex] && B[1][i] > 0) 
                maxIndex = i;
        }
        cout<<"\n\n";
        cout<<"Максимальное из значений, встречающихся в заданной матрице более одного раза: "<<B[0][maxIndex]<<endl;
    }
    else
        cout << "В матрице нет значений, встречающихся более одного раза" << endl;
    system("pause");
}
1
 Аватар для GggDrej
74 / 74 / 64
Регистрация: 21.01.2013
Сообщений: 147
30.01.2013, 15:12
Зачем здесь эти ско6ки ??
Цитата Сообщение от 3BEPb_TyTa Посмотреть сообщение
int maxIndex = -1;
for(int i = 0; i < BSize; i++){
if(B[1][i] > 0){
maxIndex = i;
break;
}
}
0
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 56
02.02.2013, 22:44  [ТС]
3BEPb_TyTa, ясно. Спасибо за хороший ответ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2013, 22:44
Помогаю со студенческими работами здесь

Определить максимальное из чисел, встречающихся в заданной матрице более одного раза
Есть код. 1 задание, где определяет количество строк, не содержащих ни одного нулевого элемента уже сделано. Помогите дописать код, чтобы...

Дана произвольная матрица, определить: Максимальное из чисел, встречающихся в заданной матрице более одного раза
Дана произвольная матрица, определить: Максимальное из чисел, встречающихся в заданной матрице более одного раза.

Максимальное из чисел, встречающихся в заданной матрице более одного раза
//Дана целочисленная прямоугольная матрица. Определить: //1) количество строк, не содержащих ни одного нулевого элемента; ...

Максимальное из чисел встречающихся в заданной матрице более одного раза
Есть программа, она работает, но мне не понятен принцип, мог бы кто нибудь помочь? #include &quot;stdafx.h&quot; #include...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru