30/09/2018, 18:43

[Hỏi bài tập C] 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("
");
	}
	num = 0;
	for (i = 0; i < n; i++)
	{
		for(j = 0; j < n; j++)
		{
			arr45[j+i][j] = ++num;
		}
	}

	int c=n,k;
	printf("
Xoay 45 do: 
");
	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("
");
	}
	
	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("
");
	}
	return 0;
}
Gió viết 20:46 ngày 30/09/2018

Đầ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

Bài liên quan
0