Дано m точек в n-мерном пространстве. Упорядочить точки по неубыванию их расстояний - C (СИ)
Формулировка задачи:
Дано m точек в n-мерном пространстве. Упорядочить точки по неубыванию их
расстояний до начала координат.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define M 3
#define N 3
int main()
{
int m=0,max,y,z,i,j,A[M][N],R[M]={0,0,0};
for (i=0; i<M; i++)
{
for (j=0; j<N; j++)
{
scanf("%d", &A[i][j]);
}
}
for (i=0; i<M; i++)
{
for (j=0; j<N; j++)
{
R[i]=R[i]+A[i][j]*A[i][j];
}
}
/*for (i=0; i<M-1; i++)
{
for (j=M-2; j>=i; j--)
{
if (R[j]>R[j+1])
{
max=R[j];
R[j]=R[j+1];
R[j+1]=max;
for (z=0; i<M; i++)
{
for (y=0; y<N; y++)
{
m=A[z][y];
A[z][y]=A[z+1][y];
A[z+1][y]=m;
}
}
}
}
}
*/
for (i=0; i<M-1; i++)
{
if (R[i]>R[i+1])
{
for (z=0; i<M; i++)
{
for (j=0; j<N; j++)
{
m=A[z][j];
A[z][j]=A[z+1][j];
A[z+1][j]=m;
}
}
}
}
for (i=0; i<M; i++)
{
for (j=0; j<N; j++)
{
printf("%d ", A[i][j]);
}
printf("\n");
}
}Решение задачи: «Дано m точек в n-мерном пространстве. Упорядочить точки по неубыванию их расстояний»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define M 3
#define N 3
int main()
{
int m, i, j, k, A[M][N], R[M];
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
scanf("%d", &A[i][j]);
}
}
for (i = 0; i < M; i++)
{
R[i] = 0;
for (j = 0; j < N; j++)
{
R[i] += A[i][j] * A[i][j];
}
}
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
printf("%d ", A[i][j]);
}
printf("= %d", R[i]);
printf("\n");
}
for (i = 0; i< M - 1; i++)
{
for (j = i + 1; j < M; j++)
{
if (R[i]>R[j])
{
for (k = 0; k < N; k++)
{
m = A[i][k];
A[i][k] = A[j][k];
A[j][k] = m;
}
m = R[i];
R[i] = R[j];
R[j] = m;
}
}
}
printf("\n===================================\n");
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
printf("%d ", A[i][j]);
}
printf("= %d", R[i]);
printf("\n");
}
getchar();
getchar();
}
Объяснение кода листинга программы
В этом коде:
- Создаются массивы A[M][N] для хранения координат точек в n-мерном пространстве и R[M] для хранения их квадратов.
- С помощью двух вложенных циклов точки считываются с консоли и сохраняются в массиве A.
- С помощью ещё двух вложенных циклов вычисляются квадраты расстояний от каждой точки до начала координат, результат сохраняется в массиве R.
- С помощью двух вложенных циклов и условного оператора точки сортируются по неубыванию их расстояний.
- Сортировка отражается в перестановке координат точек в массиве A и их квадратов в массиве R.
- Выводится отсортированный массив A и массив R.
- Выполняется дополнительная сортировка по неубыванию значений в массиве R.
- Выводится отсортированный массив A и массив R.
- Программа завершается после нажатия двух символов Enter.