Дано 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();
 
 
}

Объяснение кода листинга программы

В этом коде:

  1. Создаются массивы A[M][N] для хранения координат точек в n-мерном пространстве и R[M] для хранения их квадратов.
  2. С помощью двух вложенных циклов точки считываются с консоли и сохраняются в массиве A.
  3. С помощью ещё двух вложенных циклов вычисляются квадраты расстояний от каждой точки до начала координат, результат сохраняется в массиве R.
  4. С помощью двух вложенных циклов и условного оператора точки сортируются по неубыванию их расстояний.
  5. Сортировка отражается в перестановке координат точек в массиве A и их квадратов в массиве R.
  6. Выводится отсортированный массив A и массив R.
  7. Выполняется дополнительная сортировка по неубыванию значений в массиве R.
  8. Выводится отсортированный массив A и массив R.
  9. Программа завершается после нажатия двух символов Enter.

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы