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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.81
bvladsity
3 / 1 / 1
Регистрация: 24.05.2012
Сообщений: 39
#1

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

05.07.2012, 08:14. Просмотров 5448. Ответов 24
Метки нет (Все метки)

Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 08:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти в массиве повторяющиеся значения (C++):

Определить, есть ли в массиве повторяющиеся значения.CBuilder - C++
Составить программу обработки элементов массива, которые вводит Массив оформить в виде динамической структуры.Определить, есть ли в массиве...

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

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

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

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

Найти повторяющиеся в массиве элементы - C++
Помогите написать программу: Исходными данными являются массив из 10 элементов, заполненный пользователем с клавиатуры.Написать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Модератор
22547 / 10952 / 1776
Регистрация: 12.02.2012
Сообщений: 18,087
05.07.2012, 09:31 #3
Не согласен... Ваша программа будет искать только стоящие рядом.
bvladsity
3 / 1 / 1
Регистрация: 24.05.2012
Сообщений: 39
05.07.2012, 09:43  [ТС] #4
несовсем понимаю как работает эта програма посмотрите на скриншот пожалуйста она выдает только одинаковые цифры которые стоят рядом

Найти в массиве повторяющиеся значения
Catstail
Модератор
22547 / 10952 / 1776
Регистрация: 12.02.2012
Сообщений: 18,087
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
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
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
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
3060 / 1747 / 151
Регистрация: 01.03.2013
Сообщений: 4,930
Записей в блоге: 2
23.07.2016, 18:53 #13
IGPIGP,
C++
1
2
#include <vector>
#include <map>
и сразу все понятно Но тут вопрос философский (навеян аналогичной задаче на иных языках) - что если у нас объекты, находящиеся в массиве, не умеют сравнение на равенство? Тогда ответ вроде как очевиден - мы не можем решать эту задачу, потому что не можем проверить, равны 2 объекта или нет. Хорошо, а что если объекты у нас могут сравниваться на равенство, но не могут сравниваться на больше-меньше и не могут хешироваться? Такие есть, и немало (по крайней мере в "иных языках" (С)). Тогда задача должна решаться. Но реализация контейнера map (обычно, и с иных и в не иных (С) языках) подразумевает построение дерева, для чего надо ключи сравнивать на больше-меньше, а у нас объекты этого не умеют. Мы могли бы взять hashmap, но наши объекты не умеют и хешиться...

Вот такие воспоминания навевают первые 2 строчки кода выше...
shilko2013
240 / 217 / 117
Регистрация: 02.04.2016
Сообщений: 827
Завершенные тесты: 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
3060 / 1747 / 151
Регистрация: 01.03.2013
Сообщений: 4,930
Записей в блоге: 2
23.07.2016, 18:58 #15
shilko2013, не уверен Просто не знаю как он устроен внутри - абстракция, понимаешь, ООП и все такое...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2016, 18:58
Привет! Вот еще темы с ответами:

Найти повторяющиеся символы в массиве - C++
Доброго времени суток! Не могли бы подсказать как решить такую задачу. Дана последовательность символов, надо найти какой символ сколько...

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

Найти в массиве все повторяющиеся последовательности - C++
Создать программу, которая вводит c клавиатуры массив целых чисел, находит в нем все повторяющиеся последовательности (1 1, 2 2 2 и т.д.) и...

Массивы: Найти наиболее часто повторяющиеся числа в массиве - C++
Здравствуйте! Подскажите пожалуйста где у меня может быть ошибка. Дело в том, что вначале когда начал писать код, поставил размер массива...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.07.2016, 18:58
Ответ Создать тему
Опции темы

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