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

Определение наиболее часто встречающихся чисел (переписать на С++) - C++

Восстановить пароль Регистрация
 
kiara
1 / 1 / 0
Регистрация: 25.05.2011
Сообщений: 7
28.11.2012, 18:08     Определение наиболее часто встречающихся чисел (переписать на С++) #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
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
 
#define bounded_random(l, h) ( rand() % ((h) - (l) + 1) + (l) )
 
typedef struct NODE {
    int value;
    int count;
    struct NODE * left;
    struct NODE * right;
} node_t;
 
int push(node_t ** pTree, const int nValue) {
    if ( ! *pTree ) {
        if ( ! ( *pTree = malloc(sizeof(node_t)) ) )
            return -1;
        
        (*pTree)->value = nValue;
        (*pTree)->count = 1;
        (*pTree)->left = NULL;
        (*pTree)->right = NULL;
        
        return 0;
    }
    else if ( (*pTree)->value > nValue )
        return push(&((*pTree)->left), nValue);
    else if ( (*pTree)->value < nValue )
        return push(&((*pTree)->right), nValue);
    else
        (*pTree)->count += 1;
    
    return 0;
}
 
void deltree(node_t ** root) {
    if ( *root ) {
        deltree(&((*root)->left));
        deltree(&((*root)->right));
        free(*root);
        *root = NULL;
    }
}
 
int counters_tree(node_t ** pCounters, const node_t * pTree) {
    return ( pTree && ( counters_tree(pCounters, pTree->left) || push(pCounters, pTree->count) || counters_tree(pCounters, pTree->right) ) );
}
 
int max_count(const node_t * pTree) {
    node_t * counters, * pMax;
    int nMaxCount;
    
    counters = NULL;
    assert( pTree && counters_tree(&counters, pTree) == 0 );
    for ( pMax = counters; pMax->right != NULL; pMax = pMax->right )
        ;
    nMaxCount = pMax->value;
    deltree(&counters);
    
    return nMaxCount;
}
 
int tree_by_count(node_t ** pCountTree, const node_t * pTree, const int nCount) {
    return ( pTree && ( tree_by_count(pCountTree, pTree->left, nCount) || ( pTree->count == nCount && push(pCountTree, pTree->value) ) || tree_by_count(pCountTree, pTree->right, nCount) ) );
}
 
int min_freqmeeting(const node_t * pTree) {
    node_t * counttree, * pMin;
    int nMinValue;
    
    counttree = NULL;
    assert( pTree && tree_by_count(&counttree, pTree, max_count(pTree)) == 0 );
    for ( pMin = counttree; pMin->left != NULL; pMin = pMin->left )
        ;
    nMinValue = pMin->value;
    deltree(&counttree);
    
    return nMinValue;
}
 
void dump(const node_t * pTree) {
    if ( pTree ) {
        dump(pTree->left);
        printf("%-10d%d\n", pTree->value, pTree->count);
        dump(pTree->right);
    }
}
 
#define LOW 0
#define HIGH 9
 
int main(void) {
    size_t nValues;
    
    srand(time(NULL));
    
    while ( printf("Number of values: ") && scanf("%u", &nValues) == 1 && nValues ) {
        node_t * tree = NULL;
        
        while ( nValues-- ) {
            if ( push(&tree, bounded_random(LOW, HIGH)) ) {
                fprintf(stderr, "Memory error!\n");
                exit(1);
            }
        }
        printf("Value     Meets\n--------------------\n");
        dump(tree);
        printf("The minimum of most frequently meeting is %d\n\n", min_freqmeeting(tree));
        
        deltree(&tree);
    }
    
    exit(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 18:08     Определение наиболее часто встречающихся чисел (переписать на С++)
Посмотрите здесь:

C++ 20 наиболее часто встречающихся слов
C++ Дан непустой массив из цифр. Вывести на экран цифру наиболее часто встречающихся в этом массиве.
Поиск наиболее часто встречающихся слов в файле C++
Получить 10 наиболее часто встречающихся слов из файла C++
C++ priority_queue< int , char*, CompareHeap1 > pqMax (создать очередь с приоритетом для поиска 10 наиболее и наименее часто встречающихся слов) C++
C++ Перевод с C# на С++ (в заданном тексте найти 20 наиболее часто встречающихся слов с указанием количества использования каждого из них)
Получить 10 наиболее часто встречающихся слов в файле C++
Вывести 10 наиболее часто встречающихся чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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