Загрузка...

C + +

Тема в разделе C/C++ создана пользователем renameduser_377417 7 окт 2021. 193 просмотра

  1. renameduser_377417
    Нужно отсортировать массив: сперва числа кратные 3 по возрастанию, потом за убывание остальные числа.
    Код сортирует только кратные 3 и то из-за второго if начались проблемы, числа начали путаться.
    Код
    #include <iostream>
    using namespace std;


    int main()
    {
    setlocale(LC_ALL, "");

    int m[5], i, t, j, k;

    for (i = 0; i <= 4; i++) {
    s:cout << "Введите значение " << i + 1 << " массива ( >0 ): ";
    cin >> m[i];
    if (m[i] < 0) {
    cout << "Массив был введен не верно. ";
    goto s;
    }
    }

    for (i = 0; i <= 4; i++) {
    for (j = 0; j <= 4; j++) {
    if (m[j] > m[j + 1] && (m[j] % 3 == 0 && m[j + 1] % 3 == 0)) {
    t = m[j];
    m[j] = m[j + 1];
    m[j + 1] = t;
    k = j;
    }
    else if (m[j] > m[j + 1] && (m[j] % 3 != 0 && m[j + 1] % 3 != 0))
    {
    t = m[j];
    m[j] = m[j + 1];
    m[j + 1] = t;
    }
    }
    }


    for (i = 0; i <= 4; i++) {
    cout << m[i] << " ";
    }

    return 0;
    }
     
  2. Fidestik
    Fidestik 7 окт 2021 Заблокирован(а) 40 4 окт 2020

    --- Сообщение объединено с предыдущим 7 окт 2021
     
    1. renameduser_377417 Автор темы
  3. kekuz
    kekuz 9 окт 2021 2 6 окт 2021
    Если можно использовать всю мощь стандартной библиотеки, то можно воспользоваться функцией sort. Тогда достаточно описать правило, по которому должны сортироваться числа.

    C
    #include <iostream>
    #include <algorithm>
    #include <vector>

    #include <ctime>
    #include <cstdlib>

    using namespace std;

    int main(int argc, char const *argv[]) {

    srand(time(NULL));

    const int size = 100;

    vector<int> v;

    for(int i = 0; i < size; i++)
    v.push_back(rand() % 1000);

    sort(v.begin(), v.end(), [](int a, int b){
    if(a % 3 == 0) {
    if(b % 3 == 0)
    return a < b; // пусть кратные 3-м сортируются по возрастанию
    else
    return true; // пусть кратные 3-м "опускаются" в начало массива
    }
    else {
    if(b % 3 == 0)
    return false; // то же самое, что предыдущее
    else
    return a > b; // пусть не кратные 3-м сортируются по убыванию
    }
    });

    for(int &it : v){
    std::cout << it << '\n';
    }

    return 0;
    }
     
Top
Загрузка...