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

Поиск одинаковых элементов в строке матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Koshachek
3 / 3 / 1
Регистрация: 17.02.2012
Сообщений: 100
28.03.2014, 02:16     Поиск одинаковых элементов в строке матрицы #1
Здравствуйте. Подскажите пожалуйста, мне нужно найти количество одинаковых элементов в строке матрицы.
Я попытался написать программу, но она не работает так как надо.
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
#include <iostream>
#include <time.h>
using namespace std;
const int n = 3, m = 4;
int main()
{
    int mas[n][m];
    int kol;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            mas[i][j] = rand()%10;
    }
 
    
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << mas[i][j] << " ";
        cout << endl;
    }
    
    for (int i = 0; i < n; i++)
    {
        kol = 0;
        for (int j = 0; j < m; j++)
            for (int k = j; k < m; k++)
            {
                if (mas[i][j] == mas[i][k]) kol++;
            }
        cout << "Кол-во в " << i << "= " << kol << endl;
    }
    system("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 02:16     Поиск одинаковых элементов в строке матрицы
Посмотрите здесь:

C++ Поиск одинаковых элементов в 2 массивах
C++ Поиск одинаковых букв в строке из массива строк.
C++ поиск одинаковых элементов в массиве
C++ Поиск одинаковых элементов
C++ Поиск одинаковых элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
28.03.2014, 06:44     Поиск одинаковых элементов в строке матрицы #2
А если так:
C++
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < n; i++)
    {
        kol = 0;
        for (int j = 0; j < m; j++)
        for (int k = 0; k < m; k++)
        {
                if (mas[i][j] == mas[i][k] && j!=k) kol++;
        }
        cout << "Кол-во в " << i << "= " << kol << endl;
    }
НО такой способ сработает только, если цифра будет попадаться не более двух раз.
Koshachek
3 / 3 / 1
Регистрация: 17.02.2012
Сообщений: 100
31.03.2014, 10:33  [ТС]     Поиск одинаковых элементов в строке матрицы #3
как вариант конечно можно но...в строке то может и больше двух раз встречаться одна цифра.
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
31.03.2014, 13:00     Поиск одинаковых элементов в строке матрицы #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Предположим, есть ряд: 5, 4, 2, 5, 5, 5, 2
Программа должна вывести 4? (4 пятерки) 2? (2 разных числа одинаковы) 6? (сумма 4-х пятерок и 2-х двоек)

Добавлено через 21 минуту
Если вас интересует ответ 2 (два разных числа одинаковые (т.е. в ряду есть такая последовательность - "...5...2..25..2...2 (как пример))), то вот вам рабочий код:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
const int NUMBER_OF_COLUMNS = 10, NUMBER_OF_FIELDS = 3;
 
int main()
{
    int mas[NUMBER_OF_FIELDS][NUMBER_OF_COLUMNS];
    int *arrayOfEqualNumbers = new int[NUMBER_OF_COLUMNS / 2];
    srand(time(NULL));
     for (int i = 0; i < NUMBER_OF_FIELDS; i++)
    {
        for (int j = 0; j < NUMBER_OF_COLUMNS; j++)
            mas[i][j] = rand() %10;
    }
 
    for(int i = 0; i < NUMBER_OF_FIELDS; i++) {
        for(int j = 0; j < NUMBER_OF_COLUMNS; j++) {
            cout << mas[i][j] << " ";
        }
        cout << "\n";
    }
 
    int numberOfEqualElements = 0;
    int numberOfField;
    cout << "Choose Field. Min - 0, Max - " << NUMBER_OF_FIELDS - 1 << ": "; cin >> numberOfField;
 
    bool firstTime = true;
    int a = 0;
    for(int i = 0; i < NUMBER_OF_COLUMNS; i++) {
        for(int j = i + 1; j < NUMBER_OF_COLUMNS; j++) {
                if((mas[numberOfField][i] == mas[numberOfField][j]) && firstTime) {
                    arrayOfEqualNumbers[a] = mas[numberOfField][j];
                    a++;
                    firstTime = false;
                }
                if(mas[numberOfField][i] == mas[numberOfField][j]) {
                    for(int k = 0; k <= a; k++) {
                        if(mas[numberOfField][j] == arrayOfEqualNumbers[k]) break;
                        if((k == a) && mas[numberOfField][j] != arrayOfEqualNumbers[k]) {
                            arrayOfEqualNumbers[a] = mas[numberOfField][j];
                            a++;
                            break;
                        }
                    }
                }
            }
        }
 
    cout << "\n" << "NumberOfEqualElements = " << a;
    return 0;
}
Добавлено через 1 минуту
Код непонятен - прокомментирую.

Добавлено через 18 минут
Дописал подсчет кол-ва повторений каждого числа в строке. Все прекрасно работает.
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
73
74
75
76
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
const int NUMBER_OF_COLUMNS = 10, NUMBER_OF_FIELDS = 3;
 
int main()
{
    int mas[NUMBER_OF_FIELDS][NUMBER_OF_COLUMNS];
    int **arrayOfEqualNumbers = new int*[NUMBER_OF_COLUMNS / 2];
    for(int i = 0; i < NUMBER_OF_COLUMNS / 2; i++)
        arrayOfEqualNumbers[i] = new int[2];
 
    srand(time(NULL));
     for (int i = 0; i < NUMBER_OF_FIELDS; i++)
    {
        for (int j = 0; j < NUMBER_OF_COLUMNS; j++)
            mas[i][j] = rand() %10;
    }
 
    for(int i = 0; i < NUMBER_OF_FIELDS; i++) {
        for(int j = 0; j < NUMBER_OF_COLUMNS; j++) {
            cout << mas[i][j] << " ";
        }
        cout << "\n";
    }
 
    int numberOfEqualElements = 0;
    int numberOfField;
    cout << "Choose Field. Min - 0, Max - " << NUMBER_OF_FIELDS - 1 << ": "; cin >> numberOfField;
 
    bool firstTime = true;
    int numberOfEqualities = 0;
    for(int i = 0; i < NUMBER_OF_COLUMNS; i++) {
        for(int j = i + 1; j < NUMBER_OF_COLUMNS; j++) {
                if((mas[numberOfField][i] == mas[numberOfField][j]) && firstTime) {
                    arrayOfEqualNumbers[numberOfEqualities][0] = mas[numberOfField][j];
                    numberOfEqualities++;
                    firstTime = false;
                }
                if(mas[numberOfField][i] == mas[numberOfField][j]) {
                    for(int k = 0; k <= numberOfEqualities; k++) {
                        if(mas[numberOfField][j] == arrayOfEqualNumbers[k][0]) break;
                        if((k == numberOfEqualities) && mas[numberOfField][j] != arrayOfEqualNumbers[k][0]) {
                            arrayOfEqualNumbers[numberOfEqualities][0] = mas[numberOfField][j];
                            numberOfEqualities++;
                            break;
                        }
                    }
                }
            }
        }
 
    cout << "\n" << "NumberOfEqualElements = " << numberOfEqualities;
    cout << "\n" << "Now we will count each element...";
    for(int i = 0; i <= numberOfEqualities; i++) {
            int temp = 0;
        for(int j = 0; j < NUMBER_OF_COLUMNS; j++) {
            if(arrayOfEqualNumbers[i][0] == mas[numberOfField][j]) {
                temp++;
                arrayOfEqualNumbers[i][1] = temp;
            }
        }
    }
 
    for(int i = 0; i < numberOfEqualities; i++) {
        cout << "\n\n" << "So, number of " << arrayOfEqualNumbers[i][0] << " in this field is " << arrayOfEqualNumbers[i][1];
    }
 
    for (int i = 0; i < NUMBER_OF_COLUMNS / 2; i++)
        delete []arrayOfEqualNumbers[i];
 
    return 0;
}
Koshachek
3 / 3 / 1
Регистрация: 17.02.2012
Сообщений: 100
31.03.2014, 22:22  [ТС]     Поиск одинаковых элементов в строке матрицы #5
Здравствуйте! Спасибо большое за Ваш труд; меня интересовало следующее: есть матрица, в ее строках встречаются одинаковые числа. Мне надо было подсчитать кол-во одинаковых цифр в каждой строке. Допустим есть строка: 5 6 5 4 1 надо было вывести 2 (2 пятерки). Если можно прокомментируйте код пожалуйста. Очень хочется глубже разобраться, а то я всю голову сломал этой задачей - не смог придумать алгоритм.
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
31.03.2014, 22:26     Поиск одинаковых элементов в строке матрицы #6
Koshachek, спасибо, будет сложно, конечно, все это еще раз описать и разобрать: потребуется время. Если оно будет завтра, то напишу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 22:33     Поиск одинаковых элементов в строке матрицы
Еще ссылки по теме:

Поиск одинаковых симоволов в строке C++
C++ Упорядочить строки целочисленной матрицы по возрастанию одинаковых элементов в строке
Поиск одинаковых элементов в массиве C++

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

Или воспользуйтесь поиском по форуму:
Koshachek
3 / 3 / 1
Регистрация: 17.02.2012
Сообщений: 100
31.03.2014, 22:33  [ТС]     Поиск одинаковых элементов в строке матрицы #7
Благодарю
Yandex
Объявления
31.03.2014, 22:33     Поиск одинаковых элементов в строке матрицы
Ответ Создать тему
Опции темы

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