Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Reoalo
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11
Завершенные тесты: 1
1

Количество одинаковых элементов в одномерном массиве (строке матрицы)

25.05.2017, 22:00. Просмотров 631. Ответов 7
Метки нет (Все метки)

Надо найти кол-во одинаковых элементов в строке матрицы или одномерном массиве , без разницы, самое главное алгоритм и принцип [НАПРИМЕР : [1 1 2 2 3 5 3 ], ОТВЕТ: 6]. Посоветуете что-нибудь, очень долго над этим мучаюсь уже.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2017, 22:00
Ответы с готовыми решениями:

Найти количество одинаковых элементов в одномерном массиве
Здравствуйте, как определить количество одинаковых элементов в строке, если предположем массив из 5...

Найти количество одинаковых элементов подряд в одномерном массиве
Здравствуйте!!!Помогите, пожалуйста, написать программу:Подсчитать количество одинаковых элементов...

Подсчитать максимальное количество идущих подряд одинаковых элементов в одномерном массиве.
Доброго времени суток. Помогите пожалуйста решить задачу. Подсчитать максимальное количество...

Поиск одинаковых элементов в одномерном массиве
Необходимо определить есть ли в одномерном массиве одинаковые элементы. Программа находит...

Поиск максимального количества одинаковых элементов в одномерном массиве
Дан целочисленный массив размера N.Найти максимальное количество его одинаковых элементов....

7
keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 152
Записей в блоге: 2
25.05.2017, 22:18 2
Как вариант использовать вектор. Ну или если массив нужен обязательно, то можно скопировать массив в другой, потом найти сколько там встречается число 0. Потом берем первое число(если оно не 0) и сравниваем его с остальными- если совпадают обнуляем. Потом второе(если оно не 0) и сравниваем с остальными если находим то тоже обнуляем. Естественно счетчик считает. И так до предпоследнего. Циклы while и for в помощь. Надеюсь идея понятна.
Если не сможете сами, апните пост.
0
Reoalo
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11
Завершенные тесты: 1
25.05.2017, 22:25  [ТС] 3
Ровно такой же алгоритм я и использовал, только с реализацией беда, если больше 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
for (i = 0; i < str; i++)
    {// A - исх. массив, В - копия, К - массив кол-ва одинаковых элементов
        count = 0;
        for (j = 0; j < stolb - 1; j++)
        {
            for (k = j + 1; k < stolb; k++)
            {
                if (A[i*stolb + j] == A[i*stolb + k])
                {
                    for (j = 0; j < stolb; j++) 
                    {
                        for (k = 0; k < stolb; k++) 
                        {
                            if (A[i*stolb + j] == B[i*stolb + k])
                            {
                                count = count + 1;
                                B[i*stolb + j] = 0;
                            }
                        }
                        break;
                    }
                
                }
            }
        }
        K[i] = count;
        cout << "K[" << i << "] = " << K[i] << endl;
    }
0
keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 152
Записей в блоге: 2
25.05.2017, 22:32 4
while надо и внутри один for.
Но правильно вектор использовать.
0
25.05.2017, 22:32
Reoalo
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11
Завершенные тесты: 1
25.05.2017, 22:44  [ТС] 5
Если вам не сложно, покажите примерно как, на примере понятнее, или исправьте то что скинул, буду вам очень благодарен
0
keltor
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 152
Записей в блоге: 2
26.05.2017, 00:09 6
Фигня какая-то получилась, но работает. Массив не копировал правда.

Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <iostream.h>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
const int size=20;
int mas [size]= {0,2,3,4,8,6,7,8,0,9,0,12,13,14,15,16,17,18,8,8};
int schet=0, chis=0, j=0, i=0;
bool flag=false;
 
for (i=0; i<size;i++)      //считаем количество нулей
    {
    if (mas[i]==0){schet++;}
    }
cout<<"нулей "<<schet<<endl;  //можно убрать
if (schet<2){schet=0;}       // если нулей меньше 2х не считается
system("pause");            //можно убрать
 
while (j<size)
{
 
chis=mas[j];
 for (i=j+1; i<size;i++)
    {
    if (mas[i]==chis&&mas[i]!=0) {schet++;mas[i]=0;flag=true;}       //флаг есть ли похожие, если нашелся то включаем
    }
 if (flag){flag=false;schet++;}
 j++;
}
 
cout<<"одинаковых"<<endl;
cout<<schet<<endl;
 
 system("pause");
    return 0;
}
1
Manowar
1703 / 595 / 186
Регистрация: 12.03.2016
Сообщений: 2,164
Завершенные тесты: 1
26.05.2017, 11:06 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>
int main()
{
    std::vector <int> v{ 0,0,3,4,8,16,0,7,8,9,12,13,14,15,16,17,18,8,8 };
    int count_same = 0;
    std::sort(v.begin(), v.end());
    for (auto it = v.begin() + 1; it != v.end() - 1; it++) {
        if (*it == *(it - 1) && *it != *(it + 1)) {
            auto num = std::count(v.begin(), v.end(), *it);
            count_same += num;
        }
    }
    std::cout << " count_same = " << count_same << std::endl;
    system("pause");
}
1
Reoalo
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11
Завершенные тесты: 1
26.05.2017, 14:29  [ТС] 8
Вроде подогнал под массив, но почему то неправильно (остаются первые столбцы на 1-ой и последней строке) или вообще не сортируются строки. Хотя массив K[i], состоящий из кол-ва одинаковых элементов на строке верный

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
77
78
79
80
81
82
83
84
85
86
87
88
89
#include<iostream>
#include<algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    int i, j, k, count, str, stolb;
    cout << "Введите кол-во строк и столбцов матрицы" << endl;
    cin >> str >> stolb;
    int *A = new int[str*stolb];
    for (i = 0; i < str; i++)
    {
        cout << "Элемент для {" << i << "} строки" << endl;
        cout << "Введите  " << stolb << " элементов" << endl;
        for (j = 0; j < stolb; j++)
        {
            cin >> A[i*stolb + j];
        }
    }
    int *B = new int[i*stolb + j]; // Создаем копию матрицы А
    for (i = 0; i < str; i++)
    {
        for (j = 0; j < stolb; j++)
        {
            B[i*stolb + j] = A[i*stolb + j];
        }
    }
    int *K = new int[str]; создаем массив из кол-ва одинаковых элементов на строке
    // Находим одинаковое кол-во значений в строках
    int chis = 0;
    count = 0;
    bool flag = false;
for (i = 0; i < str; i++)
    {
        count = 0;
        j = 0;
        while (j < stolb)
        {
            chis = A[i*stolb+j];
            for (k = j + 1; k < stolb; k++)
            {
                if (B[i*stolb+k] == chis && B[i*stolb+k] != 0) { count++; B[i*stolb+k] = 0; flag = true; }       //флаг есть ли похожие, если нашелся то включаем
            }
            if (flag) { flag = false; count++; }
            j++;
            K[i] = count;
        }
        cout << "K[" << i << "] = " << K[i] << endl;
    }
// сортируем массивы К и А одновременно (Где то здесь ошибка)
for (i = 0; i < str - 1; i++)
    {
        for ( int l = 1; l < str; l++)
        {
                if (K[i] <= K[l])
                {
                    for (j = 0; j < stolb; j++) 
                                        {
                        int temp = K[i];
                        K[i] = K[l];
                        K[l] = temp;
                        temp = A[i*stolb + j];
                        A[i*stolb + j] = A[l*stolb + j];
                        A[l*stolb + j] = temp;
                    }
                }
        }
    }
// Вывод отсортированного массива на экран
    for (i = 0; i < str; i++)
    {
        for (j = 0; j < stolb; j++)
        {
            cout << A[i*stolb + j] << " ";
        }
        cout << "\n";
    }
    cout << endl;
 
    delete[] A;
    delete[] B;
    delete[] K;
    system("pause");
 
    return 0;
}
Добавлено через 7 минут
Ща проверил, он работает с матрицей 4 на 4, не больше, если 5 на 5 и выше, то он перестает переставлять строки
0
26.05.2017, 14:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2017, 14:29

Количество элементов в одномерном массиве
Приветствую всех! Вопрос, на который не знаю ответа, подскажите как лучше быть!? Только перешел...

В одномерном массиве состоящий из n элементов вычислить количество элементов массива, меньших C
:::::::

В одномерном массиве, состоящем из n вещественных элементов, вычислить количество отрицательных элементов массива
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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