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

Найти в массиве повторяющиеся значения - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.81
bvladsity
3 / 1 / 1
Регистрация: 24.05.2012
Сообщений: 39
05.07.2012, 08:14     Найти в массиве повторяющиеся значения #1
Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 08:14     Найти в массиве повторяющиеся значения
Посмотрите здесь:

найти повторяющиеся символы в массиве C++
C++ Определить, есть ли в массиве повторяющиеся значения.CBuilder
C++ Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран
C++ Написать программу, которая находит в массиве значения, повторяющиеся два и более раз
Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
05.07.2012, 09:03     Найти в массиве повторяющиеся значения #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <time.h>
#include <stdio.h>
 
using namespace std;
 
int main()
{
 
srand(time(0));
int mas[100];
for(int i=0;i<100;i++)
mas[i] = rand()%10;
for(int i=0;i<100;i++)
{
if((mas[i]==mas[i+1])||(mas[i]==mas[i-1]))
cout<<mas[i]<<" ";
}
 
 system("pause");
    return 0;
}
Catstail
Модератор
 Аватар для Catstail
21493 / 10246 / 1669
Регистрация: 12.02.2012
Сообщений: 17,129
05.07.2012, 09:31     Найти в массиве повторяющиеся значения #3
Не согласен... Ваша программа будет искать только стоящие рядом.
bvladsity
3 / 1 / 1
Регистрация: 24.05.2012
Сообщений: 39
05.07.2012, 09:43  [ТС]     Найти в массиве повторяющиеся значения #4
несовсем понимаю как работает эта програма посмотрите на скриншот пожалуйста она выдает только одинаковые цифры которые стоят рядом

Найти в массиве повторяющиеся значения
Catstail
Модератор
 Аватар для Catstail
21493 / 10246 / 1669
Регистрация: 12.02.2012
Сообщений: 17,129
05.07.2012, 09:48     Найти в массиве повторяющиеся значения #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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "iostream.h"
 
int main(int argc, char* argv[])
{
    int Arr[]={1,2,3,1,2,3,4,5,6,2,3};
    int asize=sizeof(Arr)/sizeof(int);
 
    int *Brr,*Frr;
 
    Brr=new int[asize];
    Frr=new int[asize];
 
    int ptrB=-1,flg=0,i,j;
 
    for (i=0; i< asize; i++)
    {
        Brr[i]=0;
        Frr[i]=0;
    }
 
    for (i=0; i< asize; i++)
    {
        flg=0;
        for (j=0; j<ptrB; j++)
            if (Arr[i] == Brr[j]) 
            {
                flg=-1;
                if (Frr[j] == 0) 
                {
                                    cout << Arr[i] << endl;
                                    Frr[j]=-1;
                }
 
                break;
            }
        if (flg == 0) Brr[++ptrB]=Arr[i];
        
    }
         
    delete [] Brr;      
    delete [] Frr;      
 
    return 0;
}
Student shurik
Сообщений: n/a
26.06.2013, 01:22     Найти в массиве повторяющиеся значения #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
#include <iostream>
using namespace std;
int main()
{
           int c;
    const int n=10;
    int masiv[n]={1,8,3,4,8,1,2,8,2,3};
    int masiv2[n]={0};
    for(int i=0;i<=n-1;i++)
    {
        c=masiv[i];
        for(int j=i+1;j<=n-1;j++)
        {
            if(masiv[j]==c)
            masiv2[i]=c;    
        }
    }
    for(int i=0;i<=n-1;i++)
        {
            for(int j=i+1;j<=n-1;j++)
            {
                if(masiv2[j]==masiv2[i])
                masiv2[i]=0;
            }   
        }
    for(int j=0;j<=n-1;j++)
            {
                if(masiv2[j]!=0)
                cout<<masiv2[j]<<endl;
            }
}
ironist
 Аватар для ironist
0 / 0 / 2
Регистрация: 14.02.2014
Сообщений: 14
14.02.2014, 22:21     Найти в массиве повторяющиеся значения #7
Цитата Сообщение от Student shurik Посмотреть сообщение
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
#include <iostream>
using namespace std;
int main()
{
           int c;
    const int n=10;
    int masiv[n]={1,8,3,4,8,1,2,8,2,3};
    int masiv2[n]={0};
    for(int i=0;i<=n-1;i++)
    {
        c=masiv[i];
        for(int j=i+1;j<=n-1;j++)
        {
            if(masiv[j]==c)
            masiv2[i]=c;    
        }
    }
    for(int i=0;i<=n-1;i++)
        {
            for(int j=i+1;j<=n-1;j++)
            {
                if(masiv2[j]==masiv2[i])
                masiv2[i]=0;
            }   
        }
    for(int j=0;j<=n-1;j++)
            {
                if(masiv2[j]!=0)
                cout<<masiv2[j]<<endl;
            }
}
В этом варианте будет проблема, если массив будет содержать от 2ух нулей. Из-за условия не отобразится, что ноль повторяется.
Stanis1
0 / 0 / 0
Регистрация: 23.01.2015
Сообщений: 1
23.01.2015, 17:13     Найти в массиве повторяющиеся значения #8
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
/*Написать программу, которая находит в массиве значения, повторяющиеся 2 и более раза
и показывает их на экран
*/
#include <iostream>
using namespace std;
 
void main()
{
    const int size = 10;
    int num[size];
    
    cout << "\nThis program looks for matching numbers in the array";
    cout << "\nPlease enter any ten numbers:\n";
 
    for(int i = 0; i < size; i++)
    {
        cin >> num[i];
    }
 
    cout << endl;
 
    
    int d;
    for(int i = 0; i < size; i++)
    {
        for(int j = 0; j < size; j++)
        {
            d = 0;
            if (i >= j)
            {
                continue;
            }
            if (num[i] == num[j])
            {
                for(int z = 0; z < i; z++)
                {
                    if (num[z] == num[i])
                    {
                        d = 1;
                        break;
                    }
                }
            if (d == 0)
            cout << num[i] << " ";
            break;
            
            
            }
            
        }
    }
        cout << endl;
        system("pause");
    }
Добавлено через 7 минут
В общем не получилось у меня красиво выставить код. Но зато работает.
Alesandro07
1 / 1 / 0
Регистрация: 22.01.2015
Сообщений: 17
25.01.2015, 09:57     Найти в массиве повторяющиеся значения #9
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
#include<iostream>
#include<time.h>//эта библиотека нужна для функции srand(time(NULL)
using namespace std;
 
void main()
{
    srand(time(NULL));
    setlocale (LC_ALL,"rus");//заполняет мас. случайными цифрами
    const int n=10;
    int mas[n]; 
    for (int i=0;i<n;i++) 
        {
        mas[i]=rand()%6;//случайные цифры до цифры 5, чтоб было больше повторяющихся в массиве, можно 
                                        //поставить любое вместо цифры 6//
        cout<<mas[i]<<"\t";
    }
    cout<<"Повторяющиеся - \n";
    for (int i=0;i<n;i++) //далее вложенные циклы, кот. ищут совпадения 
    {
        for (int j=i+1;j<n;j++) 
        {
            if (mas[i]==mas[j])
            {
                int f=0;
                for(int k=0;k<i;k++)
                {
                    if(mas[k]==mas[i])
                    {
                        f=1;
                    }
                }
                if(f==0)
                {
                    cout<<mas[i]<<"\t";
                }
                break;
            }
        }
    }
}
Rem1te
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 10
29.03.2015, 14:09     Найти в массиве повторяющиеся значения #10
Предлагаю свой вариант решения, базируется на переборе элементов массива, в случае попадания, проверяет не было ли подобного попадания ранее ( что исключает вероятность того что одно и тоже число будет выведено несколько раз )
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
#include <iostream>
using namespace std;
 
void main()
{
    int const sz=10;
    int arr[10]={1,3,7,7,3,8,9,7,3,7};
    short stat=0;
 
    for(int i=0;i<sz;i++){
        for(int j=i+1;j<sz;j++){
            if(arr[i]==arr[j]){
                for(int n=j-1;n>=0;n--){
                    if(arr[j]==arr[n])
                        stat++;
                }
                if(stat==1){
                    cout<<arr[i]<<" ";
                }
                stat=0;
            }
        }
    }
}
Bu4er
0 / 0 / 0
Регистрация: 23.07.2016
Сообщений: 1
23.07.2016, 13:09     Найти в массиве повторяющиеся значения #11
Как-то так

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
#include <iostream>
using namespace std;
void main()
{
    const int n = 10;
    int mas[n];
 
    cout << "Vvedite dannie: \n";
    for (int i = 0; i < n; i++)
    {
        cout << "Vvedite cifru N " << i + 1 << ": ";
        cin >> mas[i];
    }
    for (int i = 0; i < n; i++)
    {
        cout << mas[i] << "\t";
    }
    cout << "\npovtoryaushiesya cifri: ";
 
    for (int i = 0; i<n; i++)
    {
        for (int j = i + 1; j<n; j++)
        {
            if (mas[i] == mas[j])
            {
                cout << mas[i] << "\t";             
            }
        }
    }
    cout << "\n";
}
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
23.07.2016, 18:45     Найти в массиве повторяющиеся значения #12
Много разных программ представлено. А у меня самая большая:
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
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
 
template<typename T>
struct RepeatedList
{
vector<T> source;
map< T, vector<size_t> > repeatitions;
 
RepeatedList(T *arr, size_t n)
{
vector<T> tmp_vec(arr, arr+n);
source=tmp_vec;
find_all_repeated();
}
 
void find_all_repeated()
{
size_t len = source.size();
 
for(size_t i=0; i<len; ++i)
{
 
for(size_t j=0; j<len; ++j)
{
if(source[i]==source[j])
{
map< T, vector<size_t> >:: iterator fnd;
    fnd=repeatitions.find(source[i]);   
    if(fnd != repeatitions.end() && find(fnd->second.begin(), fnd->second.end(), j)==fnd->second.end())
    {
fnd->second.push_back(j);
    }
    else
    {
vector<size_t> vadd;
vadd.push_back(i);
pair< T, vector<size_t> > toAdd(source[i],vadd);
repeatitions.insert(toAdd);
    }
}
}
}
}
void show_all_repeated()
{
size_t slen = source.size();
cout<<"\n\nThe source sequense from "<<slen<<" items was:\n";
for(size_t i=0; i<slen; ++i)
cout<<source[i]<<" ";
cout<<"\n_________________________\n";
size_t len = repeatitions.size();
map< T, vector<size_t> >:: iterator it=repeatitions.begin(), it_end=repeatitions.end();
bool norep=true;
for(; it!=it_end; ++it)
{
size_t reps=it->second.size();
if(reps>1)
{
norep=false;
    cout<<"\n\nThe value "<<it->first<<" has been found "<<reps<<" times\nand it has happened at positions:\n";
size_t vlen = it->second.size();
    for(size_t i=0; i<vlen; ++i)cout<< it->second[i]+1<<" ";
}
}
if(norep)cout<<"\nNo repeatitions has been found and all values are unique.";
cout<<endl;
}
};
 
int main(int argc, char* argv[])
{
short ar[]={1,2,3,4,5,98,34};
RepeatedList<short> rep_list1(ar, sizeof(ar)/sizeof(ar[0]));
rep_list1.show_all_repeated();
 
int arr[]={1,2,1,3,4,5,1,1,2,34,43,2,33,34,78,2,1,3,4,5,6,98,34,1};
RepeatedList<int> rep_list2(arr, sizeof(arr)/sizeof(arr[0]));
rep_list2.show_all_repeated();
cout<<endl;
system("pause");
return 0;
}
_Ivana
2185 / 1390 / 124
Регистрация: 01.03.2013
Сообщений: 4,142
Записей в блоге: 2
23.07.2016, 18:53     Найти в массиве повторяющиеся значения #13
IGPIGP,
C++
1
2
#include <vector>
#include <map>
и сразу все понятно Но тут вопрос философский (навеян аналогичной задаче на иных языках) - что если у нас объекты, находящиеся в массиве, не умеют сравнение на равенство? Тогда ответ вроде как очевиден - мы не можем решать эту задачу, потому что не можем проверить, равны 2 объекта или нет. Хорошо, а что если объекты у нас могут сравниваться на равенство, но не могут сравниваться на больше-меньше и не могут хешироваться? Такие есть, и немало (по крайней мере в "иных языках" (С)). Тогда задача должна решаться. Но реализация контейнера map (обычно, и с иных и в не иных (С) языках) подразумевает построение дерева, для чего надо ключи сравнивать на больше-меньше, а у нас объекты этого не умеют. Мы могли бы взять hashmap, но наши объекты не умеют и хешиться...

Вот такие воспоминания навевают первые 2 строчки кода выше...
shilko2013
 Аватар для shilko2013
238 / 215 / 116
Регистрация: 02.04.2016
Сообщений: 814
Завершенные тесты: 1
23.07.2016, 18:56     Найти в массиве повторяющиеся значения #14
Коротко и ясно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<set>
#include<vector>
using namespace std;
int main() {
    vector<int> v = { 1,2,3,4,56,7,5,4,44,3,6,3,3,4,4,6,5,2,1 };
    multiset<int> s;
    for (auto t : v) {
        if (s.count(t) == 1)
            cout << t << " ";
        s.insert(t);
    }
    return 0;
}
Добавлено через 1 минуту
_Ivana,Мой miltiset в любом случае работает)
_Ivana
2185 / 1390 / 124
Регистрация: 01.03.2013
Сообщений: 4,142
Записей в блоге: 2
23.07.2016, 18:58     Найти в массиве повторяющиеся значения #15
shilko2013, не уверен Просто не знаю как он устроен внутри - абстракция, понимаешь, ООП и все такое...
shilko2013
 Аватар для shilko2013
238 / 215 / 116
Регистрация: 02.04.2016
Сообщений: 814
Завершенные тесты: 1
23.07.2016, 18:59     Найти в массиве повторяющиеся значения #16
_Ivana, Это ж шаблон, все варит)
_Ivana
2185 / 1390 / 124
Регистрация: 01.03.2013
Сообщений: 4,142
Записей в блоге: 2
23.07.2016, 19:02     Найти в массиве повторяющиеся значения #17
shilko2013, не убедили. Да и как можно верить на слово человеку, который сумму арифметической прогрессии считает в цикле Надо протестировать на специально сконструированных объектах, которые умеют только равенство и ничего больше.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
23.07.2016, 19:09     Найти в массиве повторяющиеся значения #18
Цитата Сообщение от _Ivana Посмотреть сообщение
Но тут вопрос философский (навеян аналогичной задаче на иных языках) - что если у нас объекты, находящиеся в массиве, не умеют сравнение на равенство?
Алгоритм прозрачен и может быть переписан и без map. Если говорить о философии то, применение данных контейнеров с ней никак не связано.
Цитата Сообщение от _Ivana Посмотреть сообщение
в "иных языках"
В иных языках равенство выполняется только на одном и том же объекте (для двух ссылок на один и тот же объект). То есть, расширяя задачу не превратиться бы в сверхновую. Тут все варианты для целых чисел и Вас это не коснулось. Но увидев ОПП Вы опять не смогли удержаться. Что же поделаешь? Я уже привык.
_Ivana
2185 / 1390 / 124
Регистрация: 01.03.2013
Сообщений: 4,142
Записей в блоге: 2
23.07.2016, 19:16     Найти в массиве повторяющиеся значения #19
Цитата Сообщение от IGPIGP Посмотреть сообщение
Алгоритм прозрачен и может быть переписан и без map. Если говорить о философии то, применение данных контейнеров с ней никак не связано.
Тогда не надо смущать народ инклюдом мапа Я не вчитывался в ваш алгоритм, просто предположил, что вы пробегаетесь по массиву и складываете в мап его элементы как ключи, увеличивая значения на 1, а потом выводите все ключи с единичным значением - уникальные элементы.
Цитата Сообщение от IGPIGP Посмотреть сообщение
В иных языках равенство выполняется только на одном и том же объекте (для двух ссылок на один и тот же объект).
В иных языках равенство выполняется так, как определит оператор равенства создатель типа (и безо всяких ссылок). Если все только для целых чисел - то это никак не отражено в заголовке темы, поэтому можно рассматривать общую постановку. А насчет ООП и удержания - та же проблема есть в любых языках, и ООП ни при чем - это вопрос реализации мапов и сетов. Жаль, что вы воспринимаете все так. Но "что же поделаешь - может и я к этому когда-нибудь привыкну" (С).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2016, 19:19     Найти в массиве повторяющиеся значения
Еще ссылки по теме:

C++ Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран
C++ Найти повторяющиеся в массиве элементы
C++ В массиве найти все повторяющиеся числа

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

Или воспользуйтесь поиском по форуму:
shilko2013
 Аватар для shilko2013
238 / 215 / 116
Регистрация: 02.04.2016
Сообщений: 814
Завершенные тесты: 1
23.07.2016, 19:19     Найти в массиве повторяющиеся значения #20
_Ivana, Я пишу так, как удобно и понятно читать новичкам. Сам я пишу алгоритмами только.
Yandex
Объявления
23.07.2016, 19:19     Найти в массиве повторяющиеся значения
Ответ Создать тему
Опции темы

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