TransWikia.com

Исключить из массива пять минимальных элементов, сдвинув оставшиеся элементы к левому краю

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]<<' ';
    }

}

2 Answers

возможная реализация: частично сортируем первые 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP