Дан ряд чисел(числа принимают значения от 1 до 9) ,нужно вывести какая цифра встречает реже всего в этом ряду,если таких цифр несколько вывести наименьшую из них. Помогите объясни сам алгоритм поиска данного числа.
Объявляете массив из 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
Все просто, читай комменты к коду и все поймешь, работает изумительно:
#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;
}
Создаёшь новый массив из 9 элементов (например mas[9]
) и заполняешь его нулями. После создаёшь 9 кейсов в switch()
, в каждый записываешь по порядку элементы нового массива в таком виде mas[N] += 1;
. В конце пишешь алгоритм определения наименьшего числа из нового массива (mas
).
Предположим есть программа, которой для работы нужен файл, расположенный в паке share/app_nameЕсли у нас INSTALL_PREFIX=/usr, то файл соответственно будет...
Вставить массив в другой массив, начиная с заданного индекса
Продолжаю штудировать самоучитель Шилтда и обратил внимание что в одном из своих примеров он объевляет enum список для членов класса, которые...
Мне необходимо сделать фильтрацию по авторам статей на новостном порталеДолжен быть один пункт с undefined фильтром для отображения статей,...