Stack Overflow на русском Asked by little_ray on February 4, 2021
Дан массив a1…an. Исключить из него пять минимальных элементов, сдвинув оставшиеся элементы к левому краю.
Моя попытка решения:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <QCoreApplication>
#include <iostream>
int kol=5, max;
int main()
{
std::cout << "Enter chislo: ";
std::cin >> max;
int chislo[max];
for(int i=0; i<max;i++)
scanf("%d",&chislo[i]);
for(int i = 0; i < max; i++)
{
for(int j = 0; j < max; j++)
{
if(chislo[i] < chislo[j])
{
int temp = chislo[i];
chislo[i] = chislo[j];
chislo[j] = temp;
}
}
}
for(int i = 5; i < max; i++)
{
std::cout << chislo[i]<<' ';
}
}
возможная реализация: частично сортируем первые 5 элементов массива, потом удаляем их
#include <iostream>
#include <algorithm>
#include <vector>
std::ostream& operator<<(std::ostream& out, const std::vector<int>& values)
{
for (const auto& value : values) {
out << value << ' ';
}
return out;
}
int main()
{
std::vector<int> values = { 3, 3, 9, 9, 4, 8, 6, 7, 2, 6 };
std::cout << values << 'n';
std::partial_sort(values.begin(), values.begin() + 5, values.end());
std::cout << values << 'n';
values.erase(values.begin(), values.begin() + 5);
std::cout << values << 'n';
return 0;
}
Answered by Ildar on February 4, 2021
Такое решение будет более корректным:
#include <iostream>
#include <vector>
#include <algorithm>
void OutputArrayContent(const std::vector<int>& v)
{
if (!v.empty())
{
std::cout << "Array content: ";
for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); i++)
{
std::cout << ' ' << *i;
}
std::cout << std::endl;
}
else
{ std::cout << "Array is empty"; }
}
int main()
{
int countElements = 0;
std::vector<int> listOfElements;
std::cout << "Enter array size: ";
std::cin >> countElements;
//Заполнение
for (int index = 0; index < countElements; index++)
{
std::cout << "Enter next number: ";
int temp;
std::cin >> temp;
listOfElements.push_back(temp);
}
//Вывод оригинала
OutputArrayContent(listOfElements);
//Удаление пяти минимальных элементов
std::vector<int>::iterator iterByMinElement;
for (int iter = 0; iter < 5 && listOfElements.size() > 0; iter++)
{
iterByMinElement = std::min_element(listOfElements.begin(),
listOfElements.end());
listOfElements.erase(iterByMinElement);
}
//Вывод результата
OutputArrayContent(listOfElements);
}
Answered by Alexey Vesker on February 4, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP