Поворот массива на 90 градусов по часовой стрелке C - C (СИ)
Формулировка задачи:
Здравствуйте, тут такая проблема, выходит неправильный результат, когда массив (n*n) больше 5 и тд.
Помогите найти ошибку.
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
scanf("%i", &n);
int **a = (int **) malloc(n*sizeof(int *));
for(int i = 0; i<n; i++){
a[i]=(int *) malloc(n*sizeof(int));
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
scanf("%i", &a[i][j]);
}
}
int temp;
for(int i=0;i<n/2;i++){
for(int j=0;j<n-1-i;j++){
temp = a[i][j];
a[i][j] = a[n-j-1][i];
a[n-j-1][i] = a[n-i-1][n-j-1];
a[n-i-1][n-j-1] = a[j][n-i-1];
a[j][n-i-1]=temp;
}
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
printf("%i ", a[i][j]);
}
printf("\n");
}
return 0;
}Решение задачи: «Поворот массива на 90 градусов по часовой стрелке C»
textual
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%i", &n);
int count = n*n;
int *a = (int *)malloc(count * sizeof(int));
for (int i = 0; i<count; i++) {
scanf("%i", &a[i]);
}
int *b = (int *)malloc(count * sizeof(int));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
b[n*j + n - (i + 1)] = a[j + i*n];
}
}
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
printf("%i ", b[i*n+j]);
}
printf("\n");
}
free(a);
free(b);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены две переменные: n (количество элементов в массиве) и count (общий размер массива).
- Выделена память под массив a с помощью malloc.
- В цикле считываются значения элементов массива a с помощью функции scanf.
- Выделена память под массив b с помощью malloc.
- В цикле производится поворот массива a на 90 градусов по часовой стрелке и сохранение в массиве b с помощью индексов.
- В цикле выводятся значения массива b с помощью функции printf.
- Освобождается память, выделенная под массивы a и b, с помощью функции free.
- Возвращается 0, что означает успешный конец работы программы.