Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Решить задачу второй курс


Автор: Ivan51 21.12.2016, 21:32
Дан упорядоченный массив целых чисел. Напечатать элемент, повторяющийся в массиве чаще всего, а также количество повторений. Если есть несколько элементов, повторяющихся одинаковое число раз, выбрать любой из них.

Автор: likehood 21.12.2016, 23:08
Не знаешь с чего начать? Для начала заведи переменную-счётчик, в которой будет храниться число идущих подряд одинаковых элементов.
Пройдись по всему массиву, сравнивая текущий элемент с предыдущим. Если они равны, смело увеличивай счётчик на единицу. Если нет, счётчик нужно сбросить в начальное состояние. Пройдись по программе отладчиком, убедись, что она работает правильно. А дальше останется найти максимальное значение этого счётчика - это уже несложно сделать.
Если есть вопросы - спрашивай.

Автор: Olej 21.12.2016, 23:33
Цитата(likehood @ 21.12.2016,  23:08)
в которой будет храниться число идущих подряд одинаковых элементов.

А что, в условии было хоть 2 слова про что-то там "подряд"? smile
Я что-то пропустил? 

Автор: baldman88 21.12.2016, 23:51
А какой язык? С или С++?

Добавлено через 3 минуты и 33 секунды
Цитата(Olej @ 21.12.2016,  23:33)
Цитата(likehood @ 21.12.2016,  23:08)
в которой будет храниться число идущих подряд одинаковых элементов.

А что, в условии было хоть 2 слова про что-то там "подряд"? smile
Я что-то пропустил?

Цитата(Ivan51 @ 21.12.2016,  21:32)
Дан упорядоченный массив целых чисел.

Автор: Ivan51 22.12.2016, 00:21
C++

Автор: vpf 22.12.2016, 13:41
Надо создать новый двухмерный массив, в котором каждая пара элементов это число и количество повторений.
Затем перебрать исходный массив,  алгоритм такой
1. Есть ли во втором массиве такое число? 
    1.1 Нет, создать новую пару, значение числа = число, значение счетчика = 1. 
    1.2 Да, значение счетчика увеличить на 1
2.  Пройтись по второму массиву и найти наибольшее значение счетчика. 
     2.1 Значение счетчика найдено. Вывести значение числа.

Все.

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

Автор: 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;
}


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Reshit-zadachu-vtoroy-kurs-id585acade84a74b47f2226b33#findElement_E7045_585bd46107af936cb745078b_0

Автор: Dmi3ev 9.1.2017, 02:41
Код

#include<iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;

int main()
{
    vector<int> mas;
    copy(istream_iterator<int> (cin), istream_iterator<int>(), back_inserter(mas));
    int m=count(mas.begin(), mas.end(), mas[0]);
    int zm=mas[0];
    for (int i=0; i<mas.size(); i++)
        if (m<count(mas.begin(), mas.end(), mas[i]))
        {
            m=count(mas.begin(), mas.end(), mas[i]);
            zm=mas[i];
        }
    cout<<"Znachenie="<<zm<<" Povtory="<<m;
    return 0;
}

Можно лучше, но пофиг)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)