Hỏi code chuyển vị ma trận 45 độ

mấy bác cho em hỏi bài tập này. em chỉ làm được nữa thôi còn nữa còn lại bị lỗi nhờ mấy bác fix dùm hoặc viết lại code khác cũng được. thanks trước.

Hãy xoay chuyển ma trận sau 1 góc 45 độ theo chiều kim đồng hồ. Hiển thị ma trận sau khi chuyển.

1 2 3
4 5 6
7 8 9
Sau khi chuyển ta được:

  1  
 4 2 
7 5 3
 8 6 
  9

code của e.

#include<stdio.h>
#include<conio.h>
int main()
{
	int i, j, n, num, u, v;
	printf("Nhap kich thuoc: ");
	scanf("%d", &n);
	int arr[n][n]={0}, arr45[n*2-1][n]={0};
	num = 1;
	for (i = 0; i < n; i++)
	{
		for(j = 0; j < n; j++)
		{
			arr[i][j] = num;
			printf("%3d", arr[i][j]);
			num++;
		}
		printf("\n");
	}
	num = 0;
	for (i = 0; i < n; i++)
	{
		for(j = 0; j < n; j++)
		{
			arr45[j+i][j] = ++num;
		}
	}

	int c=n,k;
	printf("\nXoay 45 do: \n");
	for (i = 0; i < n ; i++)
	{	
		for(v=n-i;v>0;v--)
			{
				printf("  ");
			}	
		for(j = 0; j < n; j++)
		{
			if(arr45[i][j]>0&&arr45[i][j]<n*n) printf("%4d",arr45[i][j]);
		}
		printf("\n");
	}
	
	for (i = n; i < n * 2-1; i++)
	{	
		for(v=0;v<n;v++)
		{
			printf("  ");
		}
		for(j = 0; j < n; j++)
		{
			if(arr45[i][j]!=0) printf("%4d", arr45[i][j]);
		}
		printf("\n");
	}
	return 0;
}

Đầu tiên xác định là bài toán in theo đường chéo phụ theo chiều góc trái dưới - phải trên. Với quy tắc: khi chưa qua đường chéo phụ: i+j= 0->n-1, khi đi qua thì i+j=n->2n-2

for s in range(0,n):
for i in range(0,s+1):
j=s-i

print a[j][i],

print

for s in range(n,2*n-1):
for i in range(1+s-n,n):
j=s-i
print a[j][i],
print

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?