Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 25.10.2014
Сообщений: 48
1

Сортировка массива размера n

10.04.2015, 21:40. Показов 1225. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Помогите, пожалуйста, написать программу на с++
Создать случайный массив размера n. Упорядочить его по возрастанию количества четных цифр в числе.
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2015, 21:40
Ответы с готовыми решениями:

Пирамидальная сортировка, добавить ввод размера массива пользователем
Есть программа для пирамидальной сортировки. Как сделать так чтобы пользователь сам вводил...

Быстрая сортировка (добавить ввод размера массива пользователем)
Есть программа для быстрой сортировки на C++. Как сделать так, чтобы пользователь сам вводил...

Дан целочисленный массив A размера N. Сформировать два новых целочисленных массива B и C одинакового размера, записав в
Привет,может кто сможет помочь с решением : Назовем серией группу подряд идущих одинаковых...

Из массива размером 10, сформировать два массива размера 5, включая в первый массив четные элементы исх. массива, а во второй - нечетные
Из массива размером 10, сформировать два массива размера 5, включая в первый массив четные элементы...

6
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
10.04.2015, 21:52 2
Начните с
Образцы (шаблоны) программ для типовых задач
0
0 / 0 / 0
Регистрация: 25.10.2014
Сообщений: 48
10.04.2015, 22:15  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Начните с
Образцы (шаблоны) программ для типовых задач
__________________
Сергей Сергеевич
Конечно, спасибо, но я в курсе этого всего. Я не могу просто понять "по возрастанию количества четных цифр в числе" это и не могу придумать как именно эту часть в программе реализовать. Всё остальное я знаю как делать.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
10.04.2015, 22:47 4
Цитата Сообщение от Nerewar Посмотреть сообщение
но я в курсе этого всего
А где Ваш код, раз Вы в курсе?
П.4.7 Правил:
Как можно более полно описывайте суть проблемы или вопроса, что было сделано для ее решения и какие результаты получены.
Вот Вам функция, вычисляющие количество четных цифр.
C++
1
2
3
4
5
6
7
8
9
10
11
int CountEvenDigits(int n)
{
    int c=0;
    while(n)
    {
            if( (n%10)%2==0)
               c++;
            n/=10;
    }
    return c;
}
Алгоритмы сортировки см.
Алгоритмы сортировок
0
15 / 15 / 8
Регистрация: 03.02.2015
Сообщений: 60
10.04.2015, 22:49 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
 
void bubbleSort(int *, int); // прототип функции сортировки пузырьком
 
int main(int argc, char* argv[])
{
    srand(time(NULL));
    setlocale(LC_ALL, "rus");
    cout << "Введите размер массива: ";
    int size_array; // длинна массива
    cin >> size_array;
 
    int *sorted_array = new int [size_array]; // одномерный динамический массив
    for (int counter = 0; counter < size_array; counter++)
    {
        sorted_array[counter] = rand() % 100; // заполняем массив случайными числами
        cout << setw(2) << sorted_array[counter] << "  "; // вывод массива на экран
    }
    cout << "\n\n";
 
    bubbleSort(sorted_array, size_array); // вызов функции сортировки пузырьком
 
    for (int counter = 0; counter < size_array; counter++)
    {
        cout << setw(2) << sorted_array[counter] << "  "; // печать отсортированного массива
    }
    cout << "\n";
 
    system("pause");
    return 0;
}
 
void bubbleSort(int* arrayPtr, int length_array) // сортировка пузырьком
{
 int temp = 0; // временная переменная для хранения элемента массива
 bool exit = false; // болевая переменная для выхода из цикла, если массив отсортирован
 
 while (!exit) // пока массив не отсортирован
 {
  exit = true;
  for (int int_counter = 0; int_counter < (length_array - 1); int_counter++) // внутренний цикл
    //сортировка пузырьком по возрастанию - знак >
    //сортировка пузырьком по убыванию - знак <
    if (arrayPtr[int_counter] > arrayPtr[int_counter + 1]) // сравниваем два соседних элемента
    {
     // выполняем перестановку элементов массива
     temp = arrayPtr[int_counter];
     arrayPtr[int_counter] = arrayPtr[int_counter + 1];
     arrayPtr[int_counter + 1] = temp;
     exit = false; // на очередной итерации была произведена перестановка элементов
    }
 }
}
0
0 / 0 / 0
Регистрация: 25.10.2014
Сообщений: 48
10.04.2015, 23:25  [ТС] 6
Вот попробовал сам сейчас написать с функцией вычисления кол-ва четных чисел
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* 
 * Модуль: 2
 * Автор: Максим Гусев
 * Вариант: 11
 * Задание: 
 * Created on 8 апреля 2015 г., 22:07
 */
#include <iostream>
#include <string>
#include <time.h>
#include <stdlib.h>
using namespace std;
int CountEvenDigits(int n)
{
    int c=0;
    while(n)
    {
            if((n%10)%2==0) {c++;}
            n/=10;
    }
    return c;
}
int main()
{
    srand(time(NULL));
    int n, i, j, k, p, f, t, s;
    cout << "Введите размер: ";
    cin >> n;
    int a[n];
    for (i=0; i<n; i++) {a[i]=rand()%100+1;}
    cout << "Стартовый массив: ";
    for (i=0; i<n; i++) {cout << a[i] << ' ';}
    cout << endl;
    for (i=1; i<n; i++)
    {
        for (j=0; j<n-1; j++)
        {
            p=a[j];
            k=CountEvenDigits(p);
            f=a[j+1];
            t=CountEvenDigits(f);
            if(k<t)
            {
                s=a[j];
                a[j]=a[j+1];
                a[j+1]=s;
            }
        }
    }
    cout << "Отсортированный массив: ";
    for (i=0; i<n; i++) {cout << a[i] << ' ';}
    return 0;
}

Пока пару раз проверил, вроде нормально робит. Ещё несколько вариантов попробую позже, если не пойдёт.

Добавлено через 50 секунд
спойлер что-то не открывается у меня
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* 
 * Модуль: 2
 * Автор: Максим Гусев
 * Вариант: 11
 * Задание: 
 * Created on 8 апреля 2015 г., 22:07
 */
#include <iostream>
#include <string>
#include <time.h>
#include <stdlib.h>
using namespace std;
int CountEvenDigits(int n)
{
    int c=0;
    while(n)
    {
            if((n%10)%2==0) {c++;}
            n/=10;
    }
    return c;
}
int main()
{
    srand(time(NULL));
    int n, i, j, k, p, f, t, s;
    cout << "Введите размер: ";
    cin >> n;
    int a[n];
    for (i=0; i<n; i++) {a[i]=rand()%100+1;}
    cout << "Стартовый массив: ";
    for (i=0; i<n; i++) {cout << a[i] << ' ';}
    cout << endl;
    for (i=1; i<n; i++)
    {
        for (j=0; j<n-1; j++)
        {
            p=a[j];
            k=CountEvenDigits(p);
            f=a[j+1];
            t=CountEvenDigits(f);
            if(k<t)
            {
                s=a[j];
                a[j]=a[j+1];
                a[j+1]=s;
            }
        }
    }
    cout << "Отсортированный массив: ";
    for (i=0; i<n; i++) {cout << a[i] << ' ';}
    return 0;
}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.04.2015, 00:26 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <algorithm>
#include <random>
 
int CountEvenDigits(int n)
{
    int cnt = n % 2 == 0;
    while(n /= 10)
        n % 2 || ++cnt;
    return cnt;
}
 
int main(int argc, char *argv[])
{
    int *arr;
    std::size_t n;
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<> dist(10, 999999);
    
    std::cout << "Enter n.." << std::endl;
    std::cin >> n;
    
    arr = new int[n];
    
    std::generate_n(arr, n, [&]{ return dist(gen); });
    
    for(std::size_t i = 0; i < n; ++i)
        std::cout << arr[i] << ' ';
    std::cout << std::endl;
    
    std::sort(arr, arr + n, [](int l, int r){
        return CountEvenDigits(l) < CountEvenDigits(r);
    });
    
    for(std::size_t i = 0; i < n; ++i)
        std::cout << arr[i] << ' ';
    std::cout << std::endl;
    
    delete[] arr;
}
0
11.04.2015, 00:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2015, 00:26
Помогаю со студенческими работами здесь

Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во
Помогите с задачей: Задан вещественный массив размера N. Создать целочисленный массив такого же...

Сортировка. Данна вещественная матрица размера n*m
Дана вещественная матрица размера n*m. Переставить строки матрицы: а) по возрастанию значений...

Сортировка строки матрицы произвольного размера
Помогите написать программу которая сможет отсортировать строки матрицы произвольного размера (max...

Целочисленный массив размера N. Сумма,деление,сортировка
Задание: Дан целочисленный массив размера N. Найти сумму всех элементов массива и разделить каждый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru