Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 29.09.2018
Сообщений: 7
1

Упорядочить все числа n от 1 до m в порядке неубывания количества делителей

19.11.2018, 05:51. Показов 1291. Ответов 2
Метки нет (Все метки)

Написал программу по условию:
Пусть для целого n>0 функция d(n) равна количеству делителей числа n.
Дано m>0. Упорядочить все числа n от 1 до m в порядке неубывания
значений d(n). Указание: использовать только один массив длиной m.
Используйте алгоритм простого выбора

Вот её код:
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
57
58
59
60
#include <iostream>
using namespace std;
 
int d(int n)
{
    int c=0;
    for (int i = 1; i < n; i++)
    {
        if (n % i == 0)  
        {
            c++;
        }
    }
    return c;
}
 
void x(int size)
{
    int a[50],min;
    int d1, d2;
    cout << "Массив:" << endl;
    for (int i = 0;i < size;i++)
    {
        a[i] = i+1;
        cout << a[i]<<" ";
    }
    cout << endl;
        for (int i = 0;i < size-1;i++)
        {
            d1 = d(a[i]);
            d2 = d(a[i+1]);
            min = i;
            for (int j = i + 1;j < size;j++)
            {
 
                if (d1 < d2)
                {
                    min = j;
                    swap(a[i], a[min]);
                }
            }
        }
        cout << "Массив после сортировки:" << endl;
            for (int i = 0;i < size;i++)
            {
                cout << a[i]<<" ";
            }
    cout << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int m;
    cout << "Введите число m>0" << endl;
    cin >> m;
    x(m);
    system("pause");
    return 0;
}
Не работает, помогите исправить пожалуйста. Ошибка на этапе сортировки, но я не могу понять где. Буду очень благодарен
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2018, 05:51
Ответы с готовыми решениями:

Упорядочить все числа n от 1 до m в порядке неубывания значений s(n).
Пусть для целого n&gt;0 функция s(n) равна сумме делителей числа n.Дано m&gt;0.Упорядочить все числа n от...

Упорядочить все числа n от 1 до m в порядке неубывания значений d(n)
Пусть для целого n&gt;0 функция d(n) равна количеству делителей числа n. Дано m&gt;0. Упорядочить все...

Упорядочить все числа n от 1 до m в порядке неубывания значений d(n)
Помогите составить программу: Пусть для целого n&gt;0 функция d(n) равна количеству делителей числа...

Упорядочить 3 числа в порядке неубывания
#include &lt;iostream&gt; using namespace std; int main() { int a, b, c; cin &gt;&gt; a &gt;&gt; b &gt;&gt; c;...

2
Модератор
Эксперт С++
11293 / 9280 / 5568
Регистрация: 18.12.2011
Сообщений: 24,768
19.11.2018, 06:51 2
количество делителей надо определять во внутреннем цикле
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int i = 0;i < size-1;i++)
        {
            min = i;
            for (int j = i ;j < size-1;j++)
            {
 
                d1 = d(a[j]);
                d2 = d(a[j+1]);
                if (d1 < d2)
                {
                    min = j;
                    swap(a[i], a[min]);
                }
            }
        }
0
0 / 0 / 0
Регистрация: 29.09.2018
Сообщений: 7
01.12.2018, 23:17  [ТС] 3
Если кому нужно будет, я нашёл ошибку сам.
Вот исправленный код полной программы:
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
57
58
59
60
61
#include <iostream>
using namespace std;
 
int d(int n)
{
    int c=0, k=0;
    for (int i = 0; i < n; i++)
    {
        k++;
        if (n % k == 0)  
        {
            c++;
        }
 
    }
    return c;
}
 
void x(int size)
{
    int a[50],min;
    int d1, d2;
    cout << "Массив:" << endl;
    for (int i = 0;i < size;i++)
    {
        a[i] = i+1;
        cout << a[i]<<" ";
    }
    cout << endl;
        for (int i = 0;i < size-1;i++)
        {
            min = i;
            for (int j = i + 1;j < size;j++)
            {
                d1 = d(a[j]);
                d2 = d(a[min]);
                if (d1 < d2)
                {
                    min = j;
                }
            }
swap(a[i], a[min]);
        }
        cout << "Массив после сортировки:" << endl;
            for (int i = 0;i < size;i++)
            {
                cout << a[i]<<" ";
            }
    cout << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int m;
    cout << "Введите число m>0" << endl;
    cin >> m;
    x(m);
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2018, 23:17

Упорядочить три числа в порядке неубывания
Помогите пожалуйста с двумя задачками на FPC: 1)Дано три числа. Упорядочите их в порядке...

Упорядочить числа от 1 до M по неубыванию количества делителей числа
Пусть для целого n&gt;0 функция d(n) равна количеству делителей числа n. Дано m&gt;0. Упорядочить все...

Выведите все простые множители этого числа в порядке неубывания с учетом кратности (рекурсия)
Дано натуральное число n&gt;1. Выведите все простые множители этого числа в порядке неубывания с...

Упорядочить массив в порядке неубывания
при вводе m&gt;0 выдает ошибку 201(((((( uses crt; function d(n:integer):integer; var i:integer;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.