Поворот массива на 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;
}

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

В этом коде:

  1. Объявлены две переменные: n (количество элементов в массиве) и count (общий размер массива).
  2. Выделена память под массив a с помощью malloc.
  3. В цикле считываются значения элементов массива a с помощью функции scanf.
  4. Выделена память под массив b с помощью malloc.
  5. В цикле производится поворот массива a на 90 градусов по часовой стрелке и сохранение в массиве b с помощью индексов.
  6. В цикле выводятся значения массива b с помощью функции printf.
  7. Освобождается память, выделенная под массивы a и b, с помощью функции free.
  8. Возвращается 0, что означает успешный конец работы программы.

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


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

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

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