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

Обнаружение повторяющихся цифр в массиве - C++

Восстановить пароль Регистрация
 
nonamez123
 Аватар для nonamez123
184 / 180 / 12
Регистрация: 23.10.2010
Сообщений: 1,301
01.10.2011, 02:11     Обнаружение повторяющихся цифр в массиве #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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
 
using namespace std;
 
const int size=11;
 
int kart( int * );
 
int main(int argc, char *argv[])
{
    
    
    int a[size]={15,16,5,30,8,21,5,3,18,9,5};
    
    
    
    cout << endl;
    kart(a);
    
    system("PAUSE");
    return 0;
    
}
 
int kart(int *a){
    
    int b[size];
    int k=0;
    int c[size];
    
    for (int i=0; i<size; i++){
        
        for (int j=0; j<size; j++){
            b[i]=0;
            if(a[i]==a[j]){
                b[i]=a[i];
                k++;
                c[i]=k;
            }
            
        }
        
        k=0;
        
    }
    
    for (int i=0; i<size; i++)
        if (b[i]!=0){
            cout<< b[i]<< " povtor "<< c[i]<<  endl;
        }
    return 0;}
Алгоритм такой-с каждым числом прогоняет по массиву сохраняя повторяющиеся во второй массив, а в 3 количество повторений.

Единственная беда-вывести результат уже без повторов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
01.10.2011, 02:33     Обнаружение повторяющихся цифр в массиве #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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using std::setw;
using std::cout;
using std::endl;
 
 
const int size=11;
 
int main() {
 int a[size]={15,16,5,30,8,21,5,3,18,9,5};
 int b[100] = {0};
 for(int i = 0; i<size; ++i){
     b[a[i]]++;
 }
 for(int j = 0; j<100; ++j){
     if(b[j] > 0){
         cout << setw(3) << j << setw(3) << b[j] << endl;
     }
 }  
        system("pause");
        return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
01.10.2011, 03:14     Обнаружение повторяющихся цифр в массиве #3
Цитата Сообщение от nonamez123 Посмотреть сообщение
Единственная беда-вывести результат уже без повторов)
вот держи новое решение без повторения.
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 <stdio.h>
int  cunique(const int* arr, const int size, int* aout, int* eout);
 
int  main(void) {
    const int size = 14;
    int a[size] = { 150, 1, 500, 300, 1, 150, 5000, 300, 1, 300, 5, 1, 1, -7};
    int b[size];
    int c[size];
 
    int bsize = cunique(a, size, b, c);
    for(int i = 0; i < bsize; i++) 
         printf("%4d (%d)\n", b[i], c[i]);
     getchar();
     return 0;
}
 
int  cunique(const int* arr, const int size, int* aout, int* nout) {
   int len = 0, cnt;
   const int* i, *iter; 
   const int* end  = arr + size;
 
   for(iter = arr; iter != end; *iter++) {
        for(cnt = 0, i = arr; i != end; *i++) {
             if(*i == *iter)
                  cnt++;
         }
         for(int i = 0; i < len; i++) {
              if(aout[i] == *iter) {
                     cnt = 0;
                     break;
              }
         }
         if(cnt) {
             aout[len] = *iter;
             nout[len] = cnt;
             len++;
         }
   }
   return len;  // возвращает размер уникальных подсчитанных кол-в элементов
}
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
01.10.2011, 04:29     Обнаружение повторяющихся цифр в массиве #4
както так. программа предполагает натуральные числа
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE    40
 
int create_first_el(const int *arr_job, int number){
    int i;
 
    for (i = 0; i < SIZE; ++i)
        if (find_element(arr_job, arr_job[i], i)){
            number = arr_job[i];
            break;
        }
    return number;
}
 
int find_element(const int *arr, int number, int iter){
    int tmp, i = iter + 1;
    for(i; i < SIZE; ++i)
        if(arr[i] == number)
            return 1;
    return 0;
}
 
int find_all_elements(const int *arr_job, int *arr_small){
    int i = 0, k = 0, size_arr_small = 1;
    _Bool flag;
 
    for (i; i < SIZE; ++i){
 
        flag = 1;
 
        for (k = 0; k < size_arr_small; ++k)
            if (arr_job[i] == arr_small[k])
                flag = 0;
 
        if(flag)
            if(find_element(arr_job, arr_job[i], i)){
                ++size_arr_small;
                arr_small = realloc(arr_small, size_arr_small * sizeof(int));
                arr_small[size_arr_small - 1] = arr_job[i];
            }
    }
 
    return size_arr_small;
}
 
int count_double(const int *arr, int number){
    int count = 0, i = 0;
    for (i = 0; i < SIZE; ++i)
        if(arr[i] == number)
            ++count;
    return count;
}
 
int main(){
    int array[SIZE], *array_tmp, i = 0, tmp = 0, size_tmp;
 
    srand(time(NULL));
    for (i; i < SIZE; ++i)
        array[i] = rand() % 10 + 1;
 
    printf("исходный массив\n");
    for (i = 0; i < SIZE; ++i)
        printf(" %d", array[i]);
    printf("\n\n");
 
    if(tmp = create_first_el(array, tmp)){
 
        array_tmp = (int*) malloc(sizeof(int));
        array_tmp[0] = tmp;
        size_tmp = find_all_elements(array, array_tmp);
 
        printf("\nповторяющиеся в массиве элементы\n");
        for (i = 0; i < size_tmp; ++i)
            printf(" %d", array_tmp[i]);
        printf("\n\n");
 
        for(i = 0; i < size_tmp; ++i){
            tmp = count_double(array, array_tmp[i]);
            printf("число %d повторяется %d раз\n", array_tmp[i], tmp);
        }
 
        free(array_tmp);
    }
    else
        printf("\nповторяющихся элементов нет\n");
 
    return 0;
}
вывод
исходный массив
8 3 8 2 4 9 9 10 2 9 6 1 5 2 2 8 2 4 4 2 7 7 6 1 7 7 4 9 1 6 9 8 1 6 1 6 4 1 6 5


повторяющиеся в массиве элементы
8 2 4 9 6 1 5 7

число 8 повторяется 4 раз
число 2 повторяется 6 раз
число 4 повторяется 5 раз
число 9 повторяется 5 раз
число 6 повторяется 6 раз
число 1 повторяется 6 раз
число 5 повторяется 2 раз
число 7 повторяется 4 раз
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.10.2011, 06:44     Обнаружение повторяющихся цифр в массиве #5
Цитата Сообщение от nonamez123
В общем нужно найти всё, что повторяется и какое количество раз.
построй бинарное дерево
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.10.2011, 08:22     Обнаружение повторяющихся цифр в массиве #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <map>
#include <algorithm>
#include <iomanip>
 
const int size = 11;
 
int main()
{
        int arr[11] = { 15,16,5,30,8,21,5,3,18,9,5 };
        std::map<int, int> map; 
        std::for_each( arr, arr + size, [&map] ( const int x ) { ++map[x]; } );
        std::for_each( map.begin(), map.end(), [] ( const std::pair<int, int>& temp )
        {
                std::cout << std::setw(2) << temp.first << " - " << temp.second << " times\n";
        } );
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.10.2011, 13:31     Обнаружение повторяющихся цифр в массиве #7
Сортировать и за один проход считать и выводить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2011, 16:27     Обнаружение повторяющихся цифр в массиве
Еще ссылки по теме:

Самая длинная последовательность не повторяющихся элементов в массиве C++
Количество повторяющихся элементов в массиве C++
C++ Вывод не повторяющихся в массиве В, элементов массива А

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
01.10.2011, 16:27     Обнаружение повторяющихся цифр в массиве #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сортировать
гг как-то я тупнул немного, а можно просто отсортировать.
Yandex
Объявления
01.10.2011, 16:27     Обнаружение повторяющихся цифр в массиве
Ответ Создать тему
Опции темы

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