В чем ошибка? На 5 тесте Wrong Answer

#include <string>
#include <queue>

using namespace std;

int main()
{
    int n;
    int ch = 0;
    int nech = 0;
    cin >> n;
    vector<int> Vector(n);
    queue<int> Queue;

    for (int i = 0; i < n; i++)
    {
        cin >> Vector[i];
    }

    for (int i = 0; i < n; i++)
    {
        if (Vector[i] % 2 != 0)
        {
            cout << Vector[i] << " ";
            nech++;
        }

        if (Vector[i] % 2 == 0)
        {
            Queue.push(Vector[i]);
            ch++;
        }

    }

    cout << "\n";

    while (!Queue.empty())
    {
        int val = Queue.front();
        Queue.pop();
        cout << val << " ";
    }

    if (ch > nech)
    {
        cout << "\nYES";
    }
    else
    {
        cout << "\nNO";
    }
}

Задача Вася не любит английский язык, но каждый раз старается получить хотя бы четверку за четверть, чтобы оставаться ударником. В текущей четверти Вася заметил следующую закономерность: по нечетным дням месяца он получал тройки, а по четным – четверки. Так же он помнит, в какие дни он получал эти оценки. Поэтому он выписал на бумажке все эти дни для того, чтобы оценить, сколько у него троек и сколько четверок. Помогите Васе это сделать, расположив четные и нечетные числа в разных строчках. Вася может рассчитывать на оценку 4, если четверок не меньше, чем троек.

Входные данные В первой строке входного файла INPUT.TXT записано единственное число N – количество элементов целочисленного массива (1 ≤ N ≤ 100). Вторая строка содержит N чисел, представляющих заданный массив. Каждый элемент массива – натуральное число от 1 до 31. Все элементы массива разделены пробелом.

Выходные данные В первую строку выходного файла OUTPUT.TXT нужно вывести числа, которые соответствуют дням месяцев, в которые Вася получил тройки, а во второй строке соответственно расположить числа месяца, в которые Вася получил четверки. В третьей строке нужно вывести «YES», если Вася может рассчитывать на четверку и «NO» в противном случае. В каждой строчке числа следует выводить в том же порядке, в котором они идут во входных данных. При выводе числа отделяются пробелом.

Примеры:

введите сюда описание изображения


Ответы (4 шт):

Автор решения: ТарасПрогер

Мне кажется, что нужно наверное так:

 if (ch >= nech)

Мой вариант:

#include <string>
#include <queue>
#include <iostream>
using namespace std;

short N;
vector<short> v;

vector<short> even;
vector<short> odd;

short ch = 0, ne_ch = 0;

int main()
{
    cin >> N;
    v.resize(N);
    for (auto& i : v)
        cin >> i;


    auto is_even = [](const auto lhs) { if (lhs % 2 == 0) { ch++; return true; } else return false; };
    auto is_odd = [](const auto lhs) { if (lhs % 2 != 0) { ne_ch++; return true; } else return false; };
    even.resize(count_if(v.begin(), v.end(), is_even));
    odd.resize(count_if(v.begin(), v.end(), is_odd));

    copy_if(v.begin(), v.end(), even.begin(), is_even);
    copy_if(v.begin(), v.end(), odd.begin(), is_odd);

    for (const auto i : odd)
        cout << i << ' ';
    cout << endl;
    for (const auto i : even)
        cout << i << ' ';
    cout << endl;

    if (ch >= ne_ch)
        cout << "YES";
    else
        cout << "NO";

    return 0;
}
→ Ссылка
Автор решения: Harry

Ошибка, imho, в сложности решения... Так не хотите?

int main(int argc, char * argv[])
{
    vector<int> e, o;
    int n, s = 0;
    cin >> n;
    for(int i = n; i-->0;)
    {
        cin >> n;
        s += 1 - 2*(n%2);
        (n%2 ? o : e).push_back(n);
    }
    for(int i: o) cout << i << " "; cout << "\n";
    for(int i: e) cout << i << " "; cout << "\n";
    cout << (s >= 0 ? "YES" : "NO");
}

Ну, а у вас проблема в том, что если средняя оценка 3.5, то можно рассчитывать на четверку. А 3.5 — это когда четверок столько же, сколько и пятерок...

→ Ссылка
Автор решения: Mike Novi

не смотрел, что ты написал, но делал вот так: У меня нужно вывести 4, если 4, 3 если среднее 3. Можешь просто в коде поменять 4 и 3 на "Yes" и "No". Если поможет, оцени, пожалуйста, я старался

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n, ne, ch, num=0;
    cin >> n; /* ввод n */
    vector<int> chet, nec; /* делаю вектора */
    for (int i = 0; i < n; i++)
    {
        cin >> num; /* ввод чисел и проверка на чётность */
        if (num % 2 == 0)
        {
            chet.push_back(num); /* четный идет в конец вектора четных */
        }
        else
        {
            nec.push_back(num);
        }
    }
    ch = chet.size(); /* определяю размеры получившихся векторов и приравниваю к  переменным для удобства */
    ne = nec.size();
    
    for (int i = 0; i < ne; i++) /* вывод значений вектора с нечетными значениями и пробелы */
    {
        cout << nec[i] << ' ';
    }
    cout << endl;
    for (int i = 0; i < ch; i++)
    {
        cout << chet[i] << ' ';
    }
    cout << endl;
    if (ch >= ne)
    {
        cout << "4"; //* ты вместо 4 ставь Yes *//
    }
    else
    {
        cout << "3"; //* вместо 3 ставь No *//
    }
    return 0; /* Никите привет от Mike Novi) */
}
→ Ссылка
Автор решения: user588240
#include <iostream>
#include <vector> 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    vector<int> v(n);
    vector<int> even, Neven;
    for (int i = 0; i < n; ++i){
        cin >> v[i];
        if (v[i] % 2 != 0){
            Neven.push_back(v[i]);
        } else {
            even.push_back(v[i]);
        }
    }
    for (int i = 0; i < Neven.size(); ++i) {
        cout << Neven[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < even.size(); ++i) {
        cout << even[i] << " ";
    }
    cout << endl;
    if (even.size() >= Neven.size()) {
        cout << 4;
    } else {
        cout << 3;
    }
    return 0;
}
→ Ссылка