Сдвинуть строки циклическим сдвигом вправо так, чтобы на последнем месте был максимальный по модулю элемент - C (СИ)
Формулировка задачи:
в матрице сдвинуть строки циклическим сдвигом вправо так, что бы на последнем месте был максимальный по модулю элемент.
Решение задачи: «Сдвинуть строки циклическим сдвигом вправо так, чтобы на последнем месте был максимальный по модулю элемент»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <math.h>
void main(){
setlocale(LC_ALL,"rus");
int **array_a;
int line, column;
int i_max = 0, j_max = 0;
int buf;
printf("Введите размер матрицы: ");
scanf("%d%d", &line, &column);
array_a = (int**)malloc(sizeof(int)*line);
for(int i = 0; i < line; i++)
array_a[i] = (int*)malloc(sizeof(int)*column);
printf("Заполните матрицу: \n");
for(int i = 0; i < line; i++){
for(int j = 0; j < column; j++){
scanf("%d", &array_a[i][j]);
}
}
for(int i = 0; i < line; i++){
for(int j = 0; j < column; j++){
if(abs(array_a[i][j]) > abs(array_a[i_max][j_max])){
i_max = i;
j_max = j;
}else if(abs(array_a[i][j]) == abs(array_a[i_max][j_max]) && j > j_max){
i_max = i;
j_max = j;
}
}
}
for(int k = 0; k < column - j_max - 1; k++){
for(int i = 0; i < line; i++){
buf = array_a[i][column-1];
for(int j = column - 1; j >= 0; j--){
array_a[i][j] = array_a[i][j-1];
}
array_a[i][0] = buf;
}
}
for(int i = 0; i < line; i++){
for(int j = 0; j < column; j++){
printf("%d ", array_a[i][j]);
}
printf("\n");
}
}
Объяснение кода листинга программы
- Ввод размера матрицы;
- Выделение памяти под матрицу;
- Заполнение матрицы;
- Поиск максимального элемента по модулю;
- Сдвиг всех элементов вправо на одну позицию;
- Перемещение максимального элемента на последнее место;
- Вывод результата.