Алгоритм перестановки элементов массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Кто-нибудь знает как сделать перестановку элементов таким образом 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (было) 1 2 16 15 14 3 4 13 12 11 5 6 9 8 7(стало) подскажите алгоритм программу делаю на C.

Решение задачи: «Алгоритм перестановки элементов массива»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
const int n=70;
 main()
{
 int A[9][9],i,j,x,count=0;
 char c;
 srand(time(NULL));
 printf("Хотите заполнить матрицу сами?\n Yes/No\n");
 scanf("%c",&c);
    switch (c)
       {
          case 'y':  do {
                     printf("Задайте размерность квадратной матрицы от 1 до 8\n");
                     scanf("%i",&x);}while((x<=0) && (x>=9));
                     if ((x >=1) && (x <=8))
                            {
                         for ( i = 0; i < x; i ++ )
                         for ( j = 0; j < x; j ++ )
                         {
                           printf ("A[%d][%d]=", i, j);
                           scanf ("%d", & A[i][j]);
                           }
                           printf("\n\n\nИсходная матрица\n\n");
                           for ( i = 0; i < x; i ++ )
                            {
                           for ( j = 0; j < x; j ++ )
                           printf ( "%4d", A[i][j] );
                           printf("\n\n");
                                                      }
                             }
                      else printf("ошибка!"); break;
 
    case 'n':  do{
                     printf("Задайте размерность квадратной матрицы от 1 до 8\n");
                     scanf("%i",&x);} while((x<=0) && (x>=9));
                     if ((x >=1) && (x <=8))
                     {
                         for ( i = 0; i < x; i ++ )
                         for ( j = 0; j < x; j ++ )
                           {
                           A[i][j] = rand()% n;
                           }
                           printf("\n\n\nИсходная матрица \n\n");
                           for ( i = 0; i < x; i ++ )
                                {
                           for ( j = 0; j < x; j ++ )
                           printf ( "%4d", A[i][j] );
                           printf("\n\n");
                                }
                     }
                     else  printf("ошибка!"); break;
        }
int v =x*x,t,b[v];
printf ("\nмассив X[%i]. \n",x*x);
for ( i=0;i < x; i++)
  {
 for (j=0;j<x; ++j)
  b[i*x+j]=A[i][j];
  }
for (i=0; i<=x-1; ++i)
 for (j=0;j < x; j++)
  printf ("%4i",b[i*x+j]); /*получился одномерный массив*/
 
for ( i = 0; i < (v); i++ )
for ( j = (v)-2; j >= i; j-- )
  if ( b[j] > b[j+1])
  {
   t = b[j]; b[j] = b[j+1];
    b[j+1] = t;
  }
printf("\nОтсортированный массив:\n");
for ( i = 0; i < x*x; i++ )
printf("%i ", b[i]);
/*перестановка элементов*/    
printf("\n\n");
int o,r,u,m[v];
  for (i = 0; i < v; i++)
  {
    o = i / (x+1);
    r = i % (x+1);
    if (r < 2){
    u= o * 2 + r;
    }
    else{
    u = v - o * (x-1) - r + 1;
    }
     m[i] = b[u];}
/*for (i=0;i < v ;i++)
printf("%i ", m[i]);*/
printf("\n\n Отсортированная матрица:\n\n");
for (i=0;i<x;i++){
for (j=0; j<x;j++){
A[i][j]=m[count++];
printf( "%4i",A[i][j]);}
printf(" \n\n ");
}
int maxi = 0, maxj = 0;
for (i = 0; i< x; i++)
for (j = 0; j < x; j++)
if (A[i][j] > A[maxi][maxj]) {
maxi = i;
maxj = j;
}
printf("\n");
printf("Максимальное число среди не отсортированных равно %i\n", A[maxi][maxj]);
getch();
}

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

В данном коде реализована задача по перестановке элементов массива. Алгоритм перестановки следующий:

  1. Задается размерность квадратной матрицы от 1 до 8.
  2. Если выбрано заполнение матрицы самостоятельно, то пользователю предлагается ввести значения элементов матрицы.
  3. Если выбрано случайное заполнение матрицы, то значения элементов генерируются случайным образом.
  4. Далее, массив X формируется путем перестановки элементов исходной матрицы.
  5. Затем, происходит сортировка массива X по возрастанию.
  6. После сортировки, происходит перестановка элементов массива X, чтобы получить отсортированную матрицу.
  7. В конце, находится максимальное число среди не отсортированных элементов матрицы и выводится на экран. В данном коде переменные имеют следующие значения:
    • n - константа, равная 70.
    • x - переменная, хранящая размерность квадратной матрицы.
    • A - двумерный массив, представляющий исходную матрицу.
    • c - переменная, хранящая символ, введенный пользователем для выбора режима работы программы.
    • count - переменная, используемая для подсчета количества элементов, которые необходимо переставить.
    • o - переменная, используемая для вычисления номера строки в отсортированной матрице.
    • r - переменная, используемая для вычисления номера столбца в отсортированной матрице.
    • u - переменная, используемая для вычисления номера элемента в отсортированной матрице.
    • m - массив, хранящий отсортированные элементы матрицы.
    • maxi, maxj - переменные, используемые для хранения индексов максимального элемента матрицы.
    • A[maxi][maxj] - содержит максимальное число среди не отсортированных элементов матрицы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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