Алгоритм перестановки элементов массива - 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 до 8.
- Если выбрано заполнение матрицы самостоятельно, то пользователю предлагается ввести значения элементов матрицы.
- Если выбрано случайное заполнение матрицы, то значения элементов генерируются случайным образом.
- Далее, массив X формируется путем перестановки элементов исходной матрицы.
- Затем, происходит сортировка массива X по возрастанию.
- После сортировки, происходит перестановка элементов массива X, чтобы получить отсортированную матрицу.
- В конце, находится максимальное число среди не отсортированных элементов матрицы и выводится на экран.
В данном коде переменные имеют следующие значения:
- n - константа, равная 70.
- x - переменная, хранящая размерность квадратной матрицы.
- A - двумерный массив, представляющий исходную матрицу.
- c - переменная, хранящая символ, введенный пользователем для выбора режима работы программы.
- count - переменная, используемая для подсчета количества элементов, которые необходимо переставить.
- o - переменная, используемая для вычисления номера строки в отсортированной матрице.
- r - переменная, используемая для вычисления номера столбца в отсортированной матрице.
- u - переменная, используемая для вычисления номера элемента в отсортированной матрице.
- m - массив, хранящий отсортированные элементы матрицы.
- maxi, maxj - переменные, используемые для хранения индексов максимального элемента матрицы.
- A[maxi][maxj] - содержит максимальное число среди не отсортированных элементов матрицы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д