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

Определить, сколько значений элементов в массиве встречается более одного раза

07.12.2015, 15:23. Показов 7073. Ответов 6
Метки нет (Все метки)

Дан одномерный массив А, состоящий из N элементов. Сколько значений
элементов в массиве А встречается более одного раза?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2015, 15:23
Ответы с готовыми решениями:

Подсчитать, сколько элентов встречается в данном массиве более одного раза
подсчитать, сколько элентов встречается в данном массиве более одного раза. Массив вводится из...

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

Только одна цифра в числе встречается ровно два раза, остальные - не более одного раза,вывести сумму этих цифр
]Только одна цифра в числе встречается ровно два раза, остальные - не более одного раза,вывести...

Найти и напечатать числа, которые встречаются в массиве более одного раза
Одномерный массив А состоит из 30 элементов. Найти и напечатать числа, которые встречаются в...

6
837 / 640 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
07.12.2015, 21:19 2
Лучший ответ Сообщение было отмечено Jugene555 как решение

Решение

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
#include <stdio.h>
 
void isort(int a[], int n){
    int i, j, k;
    for(i = 1; i < n; ++i){
        k = a[i];
        for(j = i - 1; (j >= 0) && (a[j] > k); --j)
            a[j + 1] = a[j];
        a[j + 1] = k;
    }
}
 
int main(void){
    int i, j, k;
    int a[] = { 5, 9, 1, 0, 5, 5, 8, 1, 0, 0, 5, 7, 9 };
    int n   = sizeof(a)/sizeof(a[0]);
    
    isort(a, n);
    for(k = i = 0; i < n; i = j){
        for(j = i + 1; (j < n) && (a[j] == a[i]); ++j)
            ;
        if((j - i) > 1){
            ++k;
            printf("value: %d\tcount: %d\n", a[i], j - i);
        }
    }
    printf("count rep: %d\n", k);
    return 0;
}
Пример работы кода
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 24
09.12.2015, 22:34  [ТС] 3
не объясните, что считает тип void в первой части кода?
C
1
2
3
4
5
6
7
8
9
void isort(int a[], int n){
    int i, j, k;
    for(i = 1; i < n; ++i){
        k = a[i];
        for(j = i - 1; (j >= 0) && (a[j] > k); --j)
            a[j + 1] = a[j];
        a[j + 1] = k;
    }
}
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 24
21.12.2015, 16:17  [ТС] 4
Геомеханик, помоги пожалуйста разобраться в коде программы, как я понял: j тут берется как массив (общее кол-во цифр в нем) i- это кол-во цифр которое не похожее на нужное... j-i это кол-во повторений нужного числа получается и если оно больше 1 то счетчик +...я так мыслю? и что считает функция в начале программы?
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
21.12.2015, 20:28 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Jugene555, вот такое простенькое решение,массив заполнен просто для примера
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
#include <stdio.h>
#include <stdlib.h>
const int N = 10;
int main()
{
    int n = 0, m = 0;//n, m - счетчики
    int i = 0, A[10] = {3,5,6,1,6,3,0,8,5,9};//заполняем массив А,состоящий из 10 элементов
    int B[N], j = 0;                         //массив В пока не заполнен
    for(i = 0; i < N; ++i){   //копируем массив А в массив В
        B[j] = A[i];
        ++j;
    }
    for(i = 0; i < N; ++i){   //сравниваем элементы двух одинаковых массивов,т.е. как бы
        for(j = 0; j < N; ++j){ //массив А сравнивается сам с собой
            if(B[j] == A[i])    //если элементы совпадают,значит есть повтор и
                ++n;            //включается счетчик n
 
        }
            if(n >= 2)//если n == 1,это означает что элемент из массива-копии встретил сам себя
                      // в массиве-оригинале,это повтором не является.А вот если n >= 2, то это уже
                ++m;  //повтор и счетчик m увеличивается на 1
                n = 0; //обнуляем счетчик n для нового шага цикла
 
    }
 
printf("\nBolee 1 raza vstrechaetsya %d elementov\n", m/2); //печатаем результат,значение счетчика
                                               //m необходимо разделить на 2,ибо он считал и свои
    return 0;                    //повторения и повторения повторяемого элемента
}
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 24
22.12.2015, 21:58  [ТС] 6
LFC, Спасибо большое за внятный ответ!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11707 / 7214 / 1710
Регистрация: 25.07.2009
Сообщений: 13,216
23.12.2015, 02:38 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
/* ANSI C 99 */
#include <stdio.h>
#include <glib.h>
 
#define MEETS_MORE_THAN (1)
 
int main(void) {
    int array[] = { 5, 9, 1, 0, 5, 5, 8, 1, 0, 0, 5, 7, 9 };
    GHashTable * map = g_hash_table_new(g_int_hash, g_int_equal);
    
    for ( int i = 0; i < G_N_ELEMENTS(array); ++i )
        g_hash_table_insert(map, array + i, GINT_TO_POINTER(GPOINTER_TO_INT(g_hash_table_lookup(map, array+i)) + 1));
    
    int count = 0;
    GHashTableIter iter;
    gpointer key, value;
    
    g_hash_table_iter_init(&iter, map);
    printf("Value\tMeets\n");
    while ( g_hash_table_iter_next(&iter, &key, &value) ) {
        printf("%d\t%d\n", *(int*)key, GPOINTER_TO_INT(value));
        if ( GPOINTER_TO_INT(value) > MEETS_MORE_THAN )
            ++count;
    }
    printf("%d values meets more than %d time(s).\n", count, MEETS_MORE_THAN);
    
    g_hash_table_remove_all(map);
    return 0;
}
Код
~/cpp/glib $ gcc -std=c99 count_values.c `pkg-config --cflags --libs glib-2.0`
~/cpp/glib $ ./a.out 
Value	Meets
0	3
8	1
9	2
1	2
5	4
7	1
4 values meets more than 1 time(s).
~/cpp/glib $
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2015, 02:38
Помогаю со студенческими работами здесь

Количество элементов массива, каждый из которых встречается в массиве не более 3-х раз
Здравствуйте, помогите, пожалуйста, написать код для задачи :sigh: ~ Дан массив. Размер не...

Найти количество элементов массива, каждый из которых встречается в массиве не более 3-х раз
Дан массив. Размер не превышает 10000 элементов. Его вводят через стандартный поток ввода. Сначала...

Определить, сколько раз встречается каждое число в массиве
Не могу отловить ошибку. Выводит белеберду , надеюсь на вашу скорую помощь. пометил самые слабые...

Определить, сколько раз встречается заданное число среди элементов массива
1. Дан двухмерный массив n×m элементов. Определить, сколько раз встречается число 7 среди элементов...


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

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

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