Задача ** c++ Дана последовательность целых чисел a1, a2, a3, ..., an, заканчивающаяся...

0 голосов
211 просмотров

Задача на c++
Дана последовательность целых чисел a1, a2, a3, ..., an, заканчивающаяся числом 0 (само число 0 в последовательность не входит, то есть ai≠0). Требуется вывести на экран числа этой последовательности, которые были больше среднего арифметического.
Формат входных данных Программе дается последовательность целых чисел. Гарантируется, что объём входных данных не превышает 1 Мб. Все числа по модулю не превосходят 230.
Формат выходных данных Требуется вывести в первой строке количество чисел больших среднего арифметического, а затем во второй строке сами эти числа через пробел.


Информатика (280 баллов) | 211 просмотров
Дан 1 ответ
0 голосов

#include

using namespace std;

int main()
{
    vector a;
    int cnt = 0;
    double average = 0;
    while (true)
    {
        int tmp;
        cin >> tmp;
        if (!tmp)
            break;
        cnt++;
        a.push_back(tmp);
        average += tmp;
    }
    average /= cnt;
    int ans = 0;
    vector b;
    for (int i = 0; i < cnt; i++)
        if (a[i] > average)
            ans++, b.push_back(a[i]);
    cout << ans << endl;<br>    for (int i = 0; i < b.size(); ++i)
        cout << b[i] << ' ';<br>}


(8.8k баллов)
0

Числа по модулю не превосходят 230, объем данных на входе до 1 Mb, т.е., будут повторные, будете повторные выводить на экран?

0

Да, если не нужны, то замени часть кода

0

vector b;
for (int i = 0; i < cnt; i++)
if (a[i] > average)
b.push_back(a[i]);
sort( b.begin(), b.end() );;
b.erase( unique( b.begin(), b.end() ), b.end() );
cout << b.size() << endl;<br> for (int i = 0; i < b.size(); ++i)
cout << b[i] << ' ';

0

Какой сложный код. Не проще завести массив a[461] и при считывании tmp заносить в массив a[tmp+230]++; а при выводе цикл от 0 до 460 if (a[i]>0) cout<<a[i]-230; ?

0

В чем сложность?Считали числа, посчитали среднее значение, нашли нужные, уникализировали массив и вывели

0

Вопрос только во времени. Удаление элементов, сортировка, все это лишнее время.

0

не при нынешних возможностях компьютеров, мы, друг, не в 80х годах 20го века

0

А как насчет оперативной памяти, если входной поток не 1Mb, а 100Mb ?

0

Открой и посмотри, сколько у тебя оперативы на компьютере

0

Лично у меня 512 , и мне хватает.