Решение задачи Преобразование последовательности - 2 с Acmp

Без пояснения   Просмотров: 19


Задана последовательность, содержащая n целых чисел. Необходимо найти число, которое встречается в этой последовательности наибольшее количество раз, а если таких чисел несколько, то найти минимальное из них, и после этого переместить все такие числа в конец заданной последовательности. Порядок расположения остальных чисел должен остаться без изменения.

Например, последовательность 1, 2, 3, 2, 3, 1, 2 после преобразования должна превратиться в последовательность 1, 3, 3, 1, 2, 2, 2.

Требуется написать программу, которая решает данную задачу.

Код

#include <stdio.h>
#include <vector>
using namespace std;
 
int main()
{
    int n, bb;
    scanf("%d", &n);
    vector<int> a;
    vector<int> b(201);
    for(int i = 0; i < n; ++i){
        scanf("%d", &bb);
        a.push_back(bb);
    }
    for(int i = 0; i < a.size(); ++i){
        b[a[i] + 100]++;
    }
    int m = 0, pos, k = 0;
    for(int i = 0; i < b.size(); ++i)
        if(b[i] > m){
            m = b[i];
            pos = i;
        }
    pos-=100;
    for(int i = 0; i < a.size(); ++i)
        if(a[i] == pos){
            a.erase(a.begin() + i);
            --i;
            ++k;
        }
    a.insert(a.end(), k, pos);
    for(int i = 0; i < a.size(); ++i){
        printf("%d" , a[i]);
        printf(" ");
    }
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться