Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 2
1

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

15.09.2015, 14:52. Показов 2462. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Задачка такая: надо найти в одномерном массиве повторяющиеся элементы и вывести значение одного из элементов. Если в массиве есть несколько групп одинаковых элементов, то необходимо вывести значение элемента, который повторяется чаще. Распишите, пожалуйста, подробнее что и как делали. Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2015, 14:52
Ответы с готовыми решениями:

Как найти одинаковые элементы в массиве?
Всем привет! Ребят, подскажите пожалуйста, как можно выписать все повторяющиеся элементы из...

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

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

Проверить, есть ли в одномерном массиве X, A(n) и B(n) одинаковые элементы, если есть, то найти среди них наибольший
Проверить, есть ли в одномерном массиве X, A(n) и B(n) одинаковые элементы, если есть, то найти...

3
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
15.09.2015, 17:21 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Oksana_P Посмотреть сообщение
Если в массиве есть несколько групп одинаковых элементов, то необходимо вывести значение элемента, который повторяется чаще.
А ещё может случиться так, что два разных элемента встречаются одинаковое количество раз. Ну, если не важно, то который первым чаще других встретится, того и выведем...
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
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <glib.h>
 
int * dup_int(const int n) {
    int * p = malloc(sizeof(int));
    assert(p);
    *p = n;
    
    return p;
}
 
void dump(void * key, void * value, void * user_data) {
    printf("%d%s%d\n", *(int*)key, (const char*)user_data, *(int*)value);
}
 
struct PAIR {
    int key;
    int value;
};
 
void find_max_value(void * key, void * value, void * user_data) {
    struct PAIR * sp = (struct PAIR*) user_data;
    int * k = (int*)key;
    int * v = (int*)value;
    
    if ( *v > sp->value ) {
        sp->key = *k;
        sp->value = *v;
    }
}
 
const char * separator = "\t";
 
int main(void) {
    int array[] = { 2, 1, 4, 6, 7, 6, 3, 3, 2, 0, 4, 4 }, i;
    struct PAIR sp = { 0, 0 };
    GHashTable * counters = g_hash_table_new_full(g_int_hash, g_int_equal, free, free);
    assert(counters);
    
    for ( i = 0; i < G_N_ELEMENTS(array); ++i ) {
        gpointer found = g_hash_table_lookup(counters, &(array[i]));
        if ( ! found ) 
            g_hash_table_insert(counters, dup_int(array[i]), dup_int(1));
        else 
            *(int*)found += 1;
    }
    
    g_hash_table_foreach(counters, find_max_value, &sp);
    
    printf("Array:\n");
    for ( i = 0; i < G_N_ELEMENTS(array); ++i )
        printf("%d ", array[i]);
    
    printf("\n--------------------\nValue\tCount\n--------------------\n");
    g_hash_table_foreach(counters, dump, (void*)separator);
    
    if ( sp.value == 1 )
        printf("All elements meets just once.\n");
    else
        printf("Most frequently (%d times) meets value of %d\n", sp.value, sp.key);
    
    g_hash_table_destroy(counters);
    exit(EXIT_SUCCESS);
}
Найти одинаковые элементы в одномерном массиве
0
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 2
17.09.2015, 21:17  [ТС] 3
Распишите, пожалуйста, подробнее что есть что, и как делали. Буду вам очень признательна!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
18.09.2015, 01:18 4
Цитата Сообщение от Oksana_P Посмотреть сообщение
Распишите, пожалуйста, подробнее что есть что, и как делали.
Для начала нужно определиться, как решать задачу. Самое очевидное решение - создать список из пар чисел, первым в которых будет некоторое значение, а вторым - сколько раз оно в массиве встретилось. Как-раз такой есть в библиотеке glib (в linux она, как правило, уже установлена, в виндовс можно взять отсюда: https://github.com/winlibs/glib нажав кнопку "скачать zip"). Только нужно понять, как работает. Лучше всего прочитать документацию - http://developer.gimp.org/api/... ables.html - будет понятнее.
как мог, старался поподробнее
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
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <glib.h>
 
/* Функция, принимающая целое значение типа int, выделяющая 
 * в динамической памяти место, достаточное для хранения, 
 * копирующая туда это значение и возвращающая указатель 
 * на выделенную память */
int * dup_int(const int n) {
    int * p = malloc(sizeof(int));
    assert(p);
    *p = n;
    
    return p;
}
 
/* функция для вывода чисел и счётчиков */
void dump(void * key, void * value, void * user_data) {
    printf("%d%s%d\n", *(int*)key, (const char*)user_data, *(int*)value);
}
 
/* структура для хранения значения и счётчика */
struct PAIR {
    int key;
    int value;
};
 
/* функция, находящая самое большое значение счётчика и сохраняющая 
 * его вместе с самим числом в переданном по указателю объекте структуры */
void find_max_value(void * key, void * value, void * user_data) {
    struct PAIR * sp = (struct PAIR*) user_data;
    int * k = (int*)key;
    int * v = (int*)value;
    
    if ( *v > sp->value ) {
        sp->key = *k;
        sp->value = *v;
    }
}
 
/* разделитель для вывода */ 
const char * separator = "\t";
 
int main(void) {
    int array[] = { 2, 1, 4, 6, 7, 6, 3, 3, 2, 0, 4, 4 }, i;
    struct PAIR sp = { 0, 0 };
    /* тот самый список пар "ключ - значение" */
    GHashTable * counters = g_hash_table_new_full(g_int_hash, g_int_equal, free, free);
    assert(counters);
    
    /* G_N_ELEMENTS(array) - макрос из glib возвращающий количество элементов
     * в статическом массиве */
    for ( i = 0; i < G_N_ELEMENTS(array); ++i ) {
        /* ищем в списке очередное значение из массива */
        gpointer found = g_hash_table_lookup(counters, &(array[i]));
        if ( ! found ) 
            /* не находим - вставляем новую пару с числом - ключём и единичей - значением */
            g_hash_table_insert(counters, dup_int(array[i]), dup_int(1));
        else 
            /* нашли - увеличиваем значение счётчика */
            *(int*)found += 1;
    }
    
    /* ищем по всему списку наибольшее значение счётчика */
    g_hash_table_foreach(counters, find_max_value, &sp);
    
    /* выводим массив */
    printf("Array:\n");
    for ( i = 0; i < G_N_ELEMENTS(array); ++i )
        printf("%d ", array[i]);
    
    /* выводим список */
    printf("\n--------------------\nValue\tCount\n--------------------\n");
    g_hash_table_foreach(counters, dump, (void*)separator);
    
    if ( sp.value == 1 )
        /* если все счётчики равны 1 - в массиве нет повторяющихся элементов */
        printf("All elements meets just once.\n");
    else
        /* выводим какое число первым встретилось чаще других */
        printf("Most frequently (%d times) meets value of %d\n", sp.value, sp.key);
    
    /* концы в воду */
    g_hash_table_destroy(counters);
    exit(EXIT_SUCCESS);
}
0
18.09.2015, 01:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2015, 01:18
Помогаю со студенческими работами здесь

Содержатся ли в одномерном массиве одинаковые элементы
Как определить, содержатся ли в одномерном массиве одинаковые элементы?

Определить, содержатся ли в одномерном массиве одинаковые элементы
Определить, содержатся ли в одномерном массиве одинаковые элементы. Помогите плз парни..

Определить, имеются ли в одномерном массиве одинаковые элементы
Определить. имеются ли в одномерном массиве одинаковые элементы...

Определить имеются ли в одномерном массиве одинаковые элементы
Определить имеются ли в одномерном массиве одинаковые элементы.

Определить, имеются ли в одномерном массиве одинаковые элементы
Помогите решить пожалуйста : 2.Определить является ли вводимая с клавиатуры последовательность...

Найти одинаковые числа в одномерном массиве
Одномерный массив:найти одинаковые числа в массиве. вот сделал но неполучится до конца import...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru