Решить задачу второй курс

 
0
 
C++
ava
Ivan51 | 21.12.2016, 21:32
Дан упорядоченный массив целых чисел. Напечатать элемент, повторяющийся в массиве чаще всего, а также количество повторений. Если есть несколько элементов, повторяющихся одинаковое число раз, выбрать любой из них.
Ответы (7)
ava
likehood | 21.12.2016, 23:08 #
Не знаешь с чего начать? Для начала заведи переменную-счётчик, в которой будет храниться число идущих подряд одинаковых элементов.
Пройдись по всему массиву, сравнивая текущий элемент с предыдущим. Если они равны, смело увеличивай счётчик на единицу. Если нет, счётчик нужно сбросить в начальное состояние. Пройдись по программе отладчиком, убедись, что она работает правильно. А дальше останется найти максимальное значение этого счётчика - это уже несложно сделать.
Если есть вопросы - спрашивай.
ava
Olej | 21.12.2016, 23:33 #
Цитата (likehood @ 21.12.2016,  23:08)
в которой будет храниться число идущих подряд одинаковых элементов.


А что, в условии было хоть 2 слова про что-то там "подряд"? :dash1
Я что-то пропустил? 
ava
baldman88 | 21.12.2016, 23:51 #
А какой язык? С или С++?
ava
Ivan51 | 22.12.2016, 00:21 #
C++
ava
vpf | 22.12.2016, 13:41 #
Надо создать новый двухмерный массив, в котором каждая пара элементов это число и количество повторений.
Затем перебрать исходный массив,  алгоритм такой
1. Есть ли во втором массиве такое число?
    1.1 Нет, создать новую пару, счетчик = 1.
    1.2 Да, нарастить счетчик.
2.  Пройтись по второму массиву и найти наибольшее значение счетчика.
     2.1 Значение счетчика найдено. Вывести значение числа.

Все.
ava
likehood | 22.12.2016, 14:45 #
vpf, твой алгоритм подходит для произвольного массива. Если массив упорядочен, то алгоритм можно немного упростить. Только нужно ли это автору вопроса? Может он просто хотел получить готовую программу. А мы тут советы какие-то даём.
ava
solowey | 22.12.2016, 16:25 #

#include <map>
#include <iostream>
using namespace std;

int main()
{
    int maxNum, maxKey = 0;
    int arr[] = {2, 3, 5, 2, 4, 6, 9, 8, 2, 3};

    map<int, int> vec = map<int, int>();
    for (int i = 0; i < sizeof(arr)/sizeof(int); i++)
    {
        if (vec.size() == 0)
        {
            vec.insert(make_pair(arr[i], 1));
            maxNum = arr[i];
            continue;
        }
        else
        {
            auto result = vec.find(arr[i]);
            if (result != vec.end())
            {
                result->second++;
                if (result->second > maxKey)
                {
                    maxKey = result->second;
                    maxNum = arr[i];
                }
            }
            else
            {
                vec.insert(make_pair(arr[i], 1));
            }
        }
    }

    cout << "Number - " << maxNum << ", iteration - " << maxKey;
    return 0;
}
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  likehood ava  baldman88 ava  solowey   vpf   Olej   Ivan51
advanced
Отправить