0 / 0 / 0
Регистрация: 15.06.2010
Сообщений: 16
1

Найти количество одинаковых элементов массива

14.10.2010, 17:21. Показов 55664. Ответов 20
Метки нет (Все метки)

Уважаемые кодеры, прошу вашей помощи.

Есть одномерный массив, который уже задан, например int a[7]={1,2,3,2,6,2,7}
Нужно посчитать количество одинаковых элементов массива а.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2010, 17:21
Ответы с готовыми решениями:

Найти количество одинаковых элементов массива
Помогите в решение я работаю на борланде Си Задание: Найти количество одинаковых элементов...

Найти количество одинаковых элементов массива
Найти количество одинаковых элементов массива и дописать это количество в этот же массив, помогите...

Найти количество одинаковых элементов двухэлементного массива А={а[і]}
найти количество одинаковых элементов двухэлементного массива А={а}

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

20
60 / 60 / 17
Регистрация: 12.10.2010
Сообщений: 129
14.10.2010, 17:24 2
набольшее количество одинаковых, или количество повторов каждого елемента?
0
0 / 0 / 0
Регистрация: 15.06.2010
Сообщений: 16
14.10.2010, 17:26  [ТС] 3
Количество повторов каждого елемента
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.10.2010, 17:29 4
C++
1
2
3
4
5
6
int a=0;
for(int i=0; i<N; ++i)
{
    a+=std::count(Arr, Arr+N, Arr[i])-1;
}
std::cout<<a<<'\n';
0
0 / 0 / 0
Регистрация: 15.06.2010
Сообщений: 16
14.10.2010, 17:38  [ТС] 5
Честно говоря, я не сильно понял что Вы написали, полный код программы можете привести?
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.10.2010, 17:53 6
vitaliyden, Не. Не прав. Ща подумаю.

Добавлено через 12 минут
потанцуем ка мы с бубном...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <vector>
 
int main()
{
    const int N=8;
    int Arr[N]={1,2,3,2,6,2,7,7};
    std::vector<int> Vec(Arr, Arr+N);
    size_t Numb=0;
    for(size_t i=0; i<Vec.size(); ++i)
    {
        Numb+=std::count(Vec.begin(), Vec.end(), Vec[i])-1;
    Vec.erase(std::remove(Vec.begin()+1, Vec.end(), Arr[i]), Vec.end());
    }   
    std::cout<<"Numb of clones: "<< Numb <<'\n';
    return 0;
}
1
60 / 60 / 17
Регистрация: 12.10.2010
Сообщений: 129
14.10.2010, 17:54 7
что-то вроде этого, только виведет все елементы масива с повторами

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
 
    int a[8] = {1,2,3,2,6,2,7,1};
    for(int i=0; i<8; i++)
    {
        cout << a[i] << '-' << count(a, a+8, a[i]) << endl;
    }
    system("pause");
    return 0;
}
1
Эксперт С++
5049 / 3110 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
14.10.2010, 18:03 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
55
56
#include <stdio.h>
#include <conio.h>
 
#define N 14
 
int min(int *a, int n)
{
    int m = a[0];
    int i;
 
    for (i = 0; i < n; i++)
        if (a[i] < m)
            m = a[i];
 
    return m;
}
 
int main()
{
    int a[N] = {1, 2, 3, 2, 6, 2, 5, 7, 1, 6, 3, 1, 7, 8};
    int m;
    int elem;
    int count;
    int i, j;
 
    m = min(a, N);
 
    for (i = 0; i < N; i++)
    {
        if (a[i] < m)
            continue;
 
        elem = a[i];
        a[i] = m - 1;
        count = 1;
 
        for (j = i; j < N; j++)
        {
            if (a[j] < m)
                continue;
            else
            {
                if (a[j] == elem)
                {
                    a[j] = m - 1;
                    count++;
                }
            }
        }
 
        printf("Elem %d repeats %d times\n", elem, count);
    }
 
    getch();
    return 0;
}
Если в лоб, то можно отсортировать массив и просто увеличивать счётчик, пока не увидим, что число поменялось, выводить полученный счётчик и обнулять его...
2
0 / 0 / 0
Регистрация: 15.06.2010
Сообщений: 16
14.10.2010, 18:10  [ТС] 9
Спасибо ребята, но работает у меня только вариант silent_1991. А в тех не находит модуль <algorithm>
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.10.2010, 18:14 10
vitaliyden, Компилятор?
0
0 / 0 / 0
Регистрация: 15.06.2010
Сообщений: 16
14.10.2010, 18:17  [ТС] 11
bc, на турбо паскаль похож интерфейс.
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.10.2010, 18:28 12
vitaliyden, #include <algorithm.h>
?

Хотя... Наверное BC про STL не знает впринципе.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11164 / 7099 / 1678
Регистрация: 25.07.2009
Сообщений: 12,986
14.10.2010, 19:03 13
Цитата Сообщение от silent_1991 Посмотреть сообщение
Чувствую, намудрил...
Да ну?!
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
90
91
92
93
94
95
#include <stdio.h>
#include <stdlib.h>
 
typedef struct VALCNT {
    int val;
    int cnt;
    struct VALCNT * next;
} valcnt_t;
 
valcnt_t * new_val_counter(int value){
    valcnt_t * vc;
    if ( ( vc = (valcnt_t*)malloc(sizeof(valcnt_t)) ) == NULL )
        return NULL;
    vc->val = value;
    vc->cnt = 1;
    vc->next = NULL;
    return vc;
}
 
typedef struct COUNTERS {
    valcnt_t * first;
    valcnt_t * last;
} counters_t;
 
counters_t * new_counters(void){
    counters_t * cs;
    if ( ( cs = (counters_t*)malloc(sizeof(counters_t)) ) == NULL )
        return NULL;
    cs->first = NULL;
    cs->last = NULL;
    return cs;
}
 
void delete_counters(counters_t * cs){
    while ( cs->first ){
        cs->last = cs->first->next;
        free(cs->first);
        cs->first = cs->last;
    }
    free(cs);
}
 
int insert(counters_t * cs, int value){
    valcnt_t * found;
 
    if ( ! cs->first ){
        if ( ( cs->first = new_val_counter(value) ) == NULL )
            return -1;
        cs->last = cs->first;
        return 0;
    }
    for ( found = cs->first; found; found = found->next ){
        if ( found->val == value ){
            found->cnt += 1;
            return 0;
        }
    }
    if ( ( cs->last->next = new_val_counter(value) ) == NULL )
        return -1;
    cs->last = cs->last->next;
    return 0;
}
 
void print_counters(const counters_t * cs){
    const valcnt_t * cur;
    printf("Value\tCount\n");
    for ( cur = cs->first; cur; cur = cur->next )
        printf("%d\t%d\n", cur->val, cur->cnt);
}
 
#define SIZE 10
 
int main(void){
    int arr[SIZE] = { 2, 3, 5, 5, 7, 8, 2, 5, 8, 3 };
    int i;
    counters_t * cs;
    if ( ( cs = new_counters() ) == NULL ){
        fprintf(stderr, "Error creating counters!\n");
        exit(1);
    }
    printf("Array:\n");
    for ( i = 0; i < SIZE; ++i ){
        printf("%d ", arr[i]);
        if ( insert(cs, arr[i]) ){
            fprintf(stderr, "Error inserting value!\n");
            delete_counters(cs);
            exit(1);
        }
    }
    printf("\n");
    print_counters(cs);
    delete_counters(cs);
 
    exit(0);
}
на турбо-с не проверял, но должно бы работать
0
Эксперт С++
5049 / 3110 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
14.10.2010, 19:10 14
Ой чувствую, сейчас начнётся
0
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
25.11.2010, 13:45 15
C++
1
2
3
4
5
6
7
for ( i = 0; i < n; i++ ) {                                    //n - размерность
        for ( j = i+1; j < n; j++ ) { 
            if ( mas[i] == mas[j] ) {
                         cout << "Совпадающие элементы имеют номера " << i << " и " << j << " в массиве"  << endl;
            }
        }
}
Можно и так!
0
4 / 4 / 1
Регистрация: 12.12.2010
Сообщений: 17
28.10.2013, 07:15 16
C++ (Qt)
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 <QCoreApplication>
#include <iostream>
#include <cstring>
 
int main(int argc, char *argv[])
{
 
int buf=0;
 
int t=0;
 
    using namespace std;
    setlocale(LC_ALL,".1251");
    QCoreApplication a(argc, argv);
 
    int mas[10] = {1,1,2,3,4,5,3,1,3,6};
 
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
        if(mas[i]>mas[j])
        {
            buf=mas[i];
            mas[i]=mas[j];
            mas[j]=buf;
        }
        }
    }
    for(int i=0;i<10;i++){
 
            if(mas[i] == mas[i+1])
            {
            if(mas[i]!= mas[i-1])
                t=0;
                t++;
                if(t==1)
                    cout<<mas[i]<<" "<<mas[i+1]<<" ";
                else
                    cout<<mas[i]<<" ";
 
            }
    }
 
    return a.exec();
}
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 1
27.02.2015, 10:26 17
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
#include <iostream>
using namespace std;
int main()
{
    setlocale(0, "");
    int a[5] = { 0, 0, 1, 0, 6 };
    int i;
    int k;
    int s = 0;
    for (i = 0; i < 3; i++)
    {
        for (k = 1; k < 4; k++)
        {
            if ((a[i] == a[k]) && (k!=i))
            {
                s++;
                cout << "элемент:" << i <<endl;
                cout << "и элемент:" << k << endl;
            }
        }
    }
    
        
    cout << "повторяются " << s <<" раз" << endl;
    
    system ("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 11
21.10.2015, 17:06 18
Unforgiven_00,
cout << a[i] << '-' << count(a, a+8, a[i]) << endl;
пожалуйста, если вам не трудно объясните значение это строки
0
Dimension
588 / 456 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
21.10.2015, 17:10 19
Цитата Сообщение от Tim1444 Посмотреть сообщение
пожалуйста,
выводит элемент ,и сколько раз он встречается в массиве
0
2 / 2 / 2
Регистрация: 10.10.2016
Сообщений: 142
19.10.2016, 21:23 20
easybudda, подскажите почему идентификаторы malloc, free, exit не определены? И можно ли элементы массива вводить с клавиатуры?

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
90
91
92
93
94
95
96
97
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h> 
 
 
typedef struct VALCNT {
    int val;
    int cnt;
    struct VALCNT * next;
} valcnt_t;
 
valcnt_t * new_val_counter(int value) {
    valcnt_t * vc;
    if ((vc = (valcnt_t*) malloc(sizeof(valcnt_t))) == NULL)
        return NULL;
    vc->val = value;
    vc->cnt = 1;
    vc->next = NULL;
    return vc;
}
 
typedef struct COUNTERS {
    valcnt_t * first;
    valcnt_t * last;
} counters_t;
 
counters_t * new_counters(void) {
    counters_t * cs;
    if ((cs = (counters_t*)malloc(sizeof(counters_t))) == NULL)
        return NULL;
    cs->first = NULL;
    cs->last = NULL;
    return cs;
}
 
void delete_counters(counters_t * cs) {
    while (cs->first) {
        cs->last = cs->first->next;
        free(cs->first);
        cs->first = cs->last;
    }
    free(cs);
}
 
int insert(counters_t * cs, int value) {
    valcnt_t * found;
 
    if (!cs->first) {
        if ((cs->first = new_val_counter(value)) == NULL)
            return -1;
        cs->last = cs->first;
        return 0;
    }
    for (found = cs->first; found; found = found->next) {
        if (found->val == value) {
            found->cnt += 1;
            return 0;
        }
    }
    if ((cs->last->next = new_val_counter(value)) == NULL)
        return -1;
    cs->last = cs->last->next;
    return 0;
}
 
void print_counters(const counters_t * cs) {
    const valcnt_t * cur;
    printf("Value\tCount\n");
    for (cur = cs->first; cur; cur = cur->next)
        printf("%d\t%d\n", cur->val, cur->cnt);
}
 
#define SIZE 10
 
int main(void) {
    int arr[SIZE] = { 2, 3, 5, 5, 7, 8, 2, 5, 8, 3 };
    int i;
    counters_t * cs;
    if ((cs = new_counters()) == NULL) {
        fprintf(stderr, "Error creating counters!\n");
        exit(1);
    }
    printf("Array:\n");
    for (i = 0; i < SIZE; ++i) {
        printf("%d ", arr[i]);
        if (insert(cs, arr[i])) {
            fprintf(stderr, "Error inserting value!\n");
            delete_counters(cs);
            exit(1);
        }
    }
    printf("\n");
    print_counters(cs);
    delete_counters(cs);
 
    exit(0);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2016, 21:23
Помогаю со студенческими работами здесь

Найти количество пар одинаковых рядом стоящих элементов массива
Найти количество пар одинаковых рядом стоящих элементов массива

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

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

Определить максимальное количество одинаковых элементов массива
Доброго времени суток. Нужна помощь по задаче. Никак не могу понять, в чём же проблема. &quot;Дан...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru