Форум программистов, компьютерный форум, киберфорум
Наши страницы

Определить, какое из чисел встречается в массиве чаще всего - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамический массив в С++: как поменять длину массива по ходу выполнения программы? http://www.cyberforum.ru/cpp-beginners/thread14746.html
Есть такая проблема: есть файл, в котором построчно записаны числа float (1 число - 1 строка). Количество чисел неизвестно. Как сделать так, т.е. какие операции надо объявить, чтоб программа...
C++ Проблема: DevC++ отказывается компилировать (виста)! Помогите, плиз, с такой проблемой: DevC++ 4.9.9.2, скачал, установил, вроде всё работает, НО отказывается компилировать в принципе. Нажимаю кнопку - никакой реакции в принципе. Путь состоит только из... http://www.cyberforum.ru/cpp-beginners/thread14737.html
Как передать массив через указатель? C++
Народ, такая проблема: при передаче в функцию массива через указатель, вся информация теряется и замещается бредом каким то, вот выдержка из программы: float sum(float *a, int *i); ... int...
C++ Как сделать методы доступа?
Добрый день.Есть исходный код.Нужно сделать методы доступа к полям класса с использованием односвязного списка. Помогите плиз кто знает как это делается. Вот исходный код: #include <iostream.h>...
C++ Арифметическое выражение http://www.cyberforum.ru/cpp-beginners/thread14693.html
Записать арифметическое выражение на языке C++ Можете написать пожалуйста Завтра последний день чтобы сдать комплексные
C++ HexToBin Подскажите как работать с этой функцией, где на форуме найти все что связано с двоичным кодом, исчислением? %) подробнее

Показать сообщение отдельно
Inlight
43 / 42 / 2
Регистрация: 17.09.2008
Сообщений: 98
31.10.2008, 14:02
Немного переделал код Duby под VS 2008. Функция ищет методом двоичного поиска. Поиск наиболее часто встречающегося элемента немного коряво реализован, зато работает Жаль, что нельзя использовать сортировку подсчётом (там доп. массивы нужны) - было бы красивее.
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
#include <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
#define MAX 100
 
int searchBinary(int* inArray, int e, int l, int r);
 
void main()
{
    int arrayOfNumbers[MAX];
    int tmp, searchingNumber, pos;
    int i, j, num = 0, buf = 0, a = 0, b = 0;
    srand(time(0)); //initial randomizer
    cout << "Source array with randomize numbers from 101 to 200:" << endl;
    // Put random numbers to array and print them
    for (int i = 0; i < MAX; i++) {
      cout << (arrayOfNumbers[i] = 101+rand()%100) << " ";
    }
    cout << endl;
    // просматриваем элемент от начала до конца, массив начинается с 0
    for (i = 0; i < MAX-1; i++) {
        // просматриваем массив со следующего от текущего положения элемента
        for (j = i+1; j < MAX; j++) {
            // если левый элемент меньше чем правый, то меняем их местами
            // т.о. меньшие элементы всплывают к концу массива
            if (arrayOfNumbers[i] < arrayOfNumbers[j]) {
                tmp = arrayOfNumbers[i];
                arrayOfNumbers[i] = arrayOfNumbers[j];
                arrayOfNumbers[j] = tmp;        
            }
        }
        if (arrayOfNumbers[i] != buf) {
            buf = arrayOfNumbers[i];
            b = 1;
        }
        else {
            b++;
            if (b > a) {
                num = buf;
                a = b;
            }
        }
        
    }
    cout << "Number " << num << " meets " << a << " times" << endl << endl <<
        "Reversed source array:" << endl;
    // print target array
    for (i=0; i < MAX; i++) {
        cout << arrayOfNumbers[i] << " ";
    }
    cout << endl << endl << "Search number: ";
    cin >> searchingNumber;
    cout << endl;
    pos = searchBinary(arrayOfNumbers, searchingNumber, 0, MAX-1);
    pos != -1 ? cout << "Find in position " << pos+1 : cout << "Not find.";
    _getch();
}
 
int searchBinary(int* inArray, int e, int head, int tail)
{   //inArray – массив, е – эталон поиска, 
    //head, tail – левая и правая границы подмассива, в котором производится поиск
    //Функция возвращает позицию найденного элемента (нумерация от 0) или -1 }
    int currPos = -1;
    if ((tail == head) && (inArray[tail] != e )) {
        return -1;
    }
    else {
           currPos = (head+tail)/2;
           if (e == inArray[currPos]) {
               return currPos;
           }
           else {
               if (e > inArray[currPos]) {
                   currPos = searchBinary(inArray, e, head, currPos);
               }
               else {
                   currPos = searchBinary(inArray, e, currPos+1, tail);
               }
           }
    }
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru