Наименьшее количество чисел в ряду

269
28 марта 2017, 13:53

Дан ряд чисел(числа принимают значения от 1 до 9) ,нужно вывести какая цифра встречает реже всего в этом ряду,если таких цифр несколько вывести наименьшую из них. Помогите объясни сам алгоритм поиска данного числа.

Answer 1

Объявляете массив из 9 элементов. Например

unsigned int digit[9] = {};

Проходите по основному массиву чисел и, соответственно, увеличиваете элемент с индексом, равным на 1 меньше, чем значение числа, в массиве digit на 1,

То есть если есть массив чисел

int a[n];

каким-нибудь образом заполненный, то в цикле пишите

for ( sie_t i = 0; i < n; i++ )
{
    ++digit[a[i] - 1];
}

Затем в массиве digit ищете минимальный элемент отличный от 0.

программа может выглядеть следующим образом

#include <iostream>
#include <cstdlib>
#include <ctime>
int main() 
{
    const size_t N = 20;
    const int MAX_VALUE = 8;
    int a[N];
    std::srand( ( unsigned int )std::time( nullptr ) );
    for ( size_t i = 0; i < N; i++ ) a[i] = std::rand() % MAX_VALUE + 1;
    for ( int x : a ) std::cout << x << ' ';
    std::cout << std::endl;
    size_t digit[MAX_VALUE] = {};
    for ( size_t i = 0; i < N; i++ ) ++digit[a[i] - 1];
    for ( int x : digit ) std::cout << x << ' ';
    std::cout << std::endl;
    size_t min = 0;
    for ( size_t i = 0; i < MAX_VALUE; i++ )
    {
        if ( digit[min] == 0 || digit[i] != 0 && digit[i] < digit[min] ) min = i;
    }
    std::cout << "The most rare number is " << min + 1 
              << " that occurs " << digit[min]
              << " times" << std::endl;
    return 0;
}

Вывод программы на консоль может быть следующим

3 5 2 8 7 5 3 1 6 8 8 4 2 1 7 2 1 2 6 3 
3 4 3 1 2 2 2 3 
The most rare number is 4 that occurs 1 times
Answer 2

Все просто, читай комменты к коду и все поймешь, работает изумительно:

#include <windows.h>
#include <map>
#include <algorithm>
int main()
{
    std::vector<int> numbers;
    numbers = { 0,1,2,3,5,9,5,2,3,2,1,0,5,8,9,6,3,4 };
    std::map<int, int> values;
    //Загружаем в контейнер все значения и количество их совпадений
    for (auto it: numbers)
    {
        int temp{ 0 };
        for (auto val: numbers)
        {
            if (it == val)
            {
                temp++;
            }
        }
        values.insert(std::make_pair(it, temp));
        temp = 0;
    }
    for (auto it: values)
    {
        printf_s("value [%d] , sum [%d]\n", it.first, it.second);
    }
    //Находим минимальное количество совпадений от всех чисел
    int minElement = std::min_element(values.begin(), values.end(), [](std::pair<int, int> A, std::pair<int, int> B)
    {
        return A.second < B.second;
    }
    )->second;
    printf_s("min element is: [%d]\n", minElement);
    //Фильтруем все числа с минимальным совпадением, которое мы нашли выше
    std::map<int, int> endVal;
    for (auto it: values)
    {
        if (it.second == minElement)
        {
            endVal.insert(std::make_pair(it.first, minElement));
        }
    }
    //Находим минимальное число с минимальным совпадением раз
    int endMinElement = std::min_element(endVal.begin(), endVal.end(), [](std::pair<int, int> A, std::pair<int, int> B)
    {
        return A.first < B.first;
    }
    )->first;
    printf_s("End Min Element is: [%d]", endMinElement);
    while (true)
    {
        Sleep(1);
    }
    return 0;
}
Answer 3

Создаёшь новый массив из 9 элементов (например mas[9]) и заполняешь его нулями. После создаёшь 9 кейсов в switch(), в каждый записываешь по порядку элементы нового массива в таком виде mas[N] += 1;. В конце пишешь алгоритм определения наименьшего числа из нового массива (mas).

READ ALSO
c++: как открыть файл из директории share/app_name?

c++: как открыть файл из директории share/app_name?

Предположим есть программа, которой для работы нужен файл, расположенный в паке share/app_nameЕсли у нас INSTALL_PREFIX=/usr, то файл соответственно будет...

267
Вставка массива с заданной позиции: [требует правки]

Вставка массива с заданной позиции: [требует правки]

Вставить массив в другой массив, начиная с заданного индекса

368
enum или boolean члены класса что лучше?

enum или boolean члены класса что лучше?

Продолжаю штудировать самоучитель Шилтда и обратил внимание что в одном из своих примеров он объевляет enum список для членов класса, которые...

266
Фильтрация на web-ресурсе с помощью JS

Фильтрация на web-ресурсе с помощью JS

Мне необходимо сделать фильтрацию по авторам статей на новостном порталеДолжен быть один пункт с undefined фильтром для отображения статей,...

253