Нужно упорядочить массив целых чисел по количеству делителей.(0 и собственно само число не считать)
(количество чисел массива и их значения вводится с клавиатуры)Заранее благодарен.
C/C++
Программа на языке Си
Синтаксис ++, если критично - переделай на голый С:
#define NumOfElements 3;
struct MyNum
{
int Val;
int divcnt = 0;
int GetDivisors()
{
if (divcnt > 0)
return divcnt;
divcnt = 2;
for (int i = 2; i a[i].Val;
bool b = true;
while (b)
{
b = false;
for (int i = 0; i a[i + 1].GetDivisors())
{
MyNum x = a[i];
a[i] = a[i + 1];
a[i + 1] = x;
b = true;
}
}
for (int i = 0; i < size; i++)
cout
Для натуральных чисел с парой динамических массивов (само число и единица делителями не считаются, а 0 вообще тут причём - я не знаю) и сортировкой пузырьком по возрастанию количества делителей (при равном количестве натуральных делителей разных чисел сами эти числа по возрастанию не сортируются, а все отрицательные делители не учитываются):
#include <math.h>
#include <stdio.h>
#include <malloc.h>
int main()
{
int i, j, k, n, a;
printf("n: ");
scanf("%d", &n);
int *A = (int*) malloc(n * sizeof(int));
int *B = (int*) malloc(n * sizeof(int));
for (i = 0; i < n; i++)
{
printf("%d) ", i + 1);
scanf("%d", &A[i]);
a = sqrt(A[i]);
k = 0;
if (A[i] < 4)
{
B[i] = 0;
continue;
}
for (j = 2; j <= a; j++)
if (A[i] % j == 0) k += 2;
if (a * a == A[i]) k--;
B[i] = k;
}
printf("\n");
for (i = 0; i < n; i++)
printf("%2d) %4d%4d\n", i + 1, A[i], B[i]);
printf("\n");
for (i = 1; i < n; i++)
for (j = n - 1; j >= i; j--)
if (B[j - 1] > B[j])
{
k = A[j - 1];
A[j - 1] = A[j];
A[j] = k;
k = B[j - 1];
B[j - 1] = B[j];
B[j] = k;
}
for (i = 0; i < n; i++)
printf("%2d) %4d%4d\n", i + 1, A[i], B[i]);
}
#include <math.h>
#include <stdio.h>
#include <malloc.h>
int main()
{
int i, j, k, n, a;
printf("n: ");
scanf("%d", &n);
int *A = (int*) malloc(n * sizeof(int));
int *B = (int*) malloc(n * sizeof(int));
for (i = 0; i < n; i++)
{
printf("%d) ", i + 1);
scanf("%d", &A[i]);
a = sqrt(A[i]);
k = 0;
if (A[i] < 4)
{
B[i] = 0;
continue;
}
for (j = 2; j <= a; j++)
if (A[i] % j == 0) k += 2;
if (a * a == A[i]) k--;
B[i] = k;
}
printf("\n");
for (i = 0; i < n; i++)
printf("%2d) %4d%4d\n", i + 1, A[i], B[i]);
printf("\n");
for (i = 1; i < n; i++)
for (j = n - 1; j >= i; j--)
if (B[j - 1] > B[j])
{
k = A[j - 1];
A[j - 1] = A[j];
A[j] = k;
k = B[j - 1];
B[j - 1] = B[j];
B[j] = k;
}
for (i = 0; i < n; i++)
printf("%2d) %4d%4d\n", i + 1, A[i], B[i]);
}

Максим Казанцев
А зачем он выдает тоже самое в другом порядке?
Похожие вопросы
- Написать программу на языке Си
- Написать программу на языке Си, которая решит эту задачу:
- Помогите пожалуйста решить программу на языке СИ!!!
- Помогите исправить программу на языке СИ, работает коряво.
- Помогите с программой на языке Си
- Помогите написать программу на языке Си
- Написать программу в языке Си, которая с помощью указателей на функцию выполняет задание
- Программа в языке Си
- Помогите, пожалуйста, написать программу на языке Си.
- Программа на языке си.