要求

输出一个\(n*n\)的数字方阵,方阵样式如下所示

4 //输入的方阵大小
   1  12  11  10
   2  13  16   9
   3  14  15   8
   4   5   6   7

解题思路

数字旋转问题的输出是一个比较困难的问题,这里我们可以预先开辟一个数组,然后在数组对应的位置存储对应的数字,最后按照行数进行输出,可以很好地解决这个输出问题。

对于如何计算出相应的位置,这里使用的是递归方法。每次解决方阵的最外层。函数\(Num(number, begin, MatrixSize)\)有三个参数,第一个参数表示这一层开始的数字,表示是第几层,表示当前是多大的方阵。然后四个循环,计算出四条边位置。具体实现参考代码。

代码实现

#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int a[maxn][maxn];
void Num(int number, int begin, int MatrixSize)
{
	if(MatrixSize<1)
		return ;
	int i, j;
	for(i=begin; i<=MatrixSize; i++) //先向下 
	{
		a[i][begin]=number++;
	}
	i-=1;
	for(j=begin+1; j<=MatrixSize; j++) // 然后向右 
	{
		a[i][j]=number++;
	}
	j-=1;
	for(i-=1; i>=begin; i--) //再向上 
	{
		a[i][j]=number++;
	}
	i+=1;
	for(j-=1; j>begin; j--) //最后再向左 
	{
		a[i][j]=number++;
	}
	Num(number, begin+1, MatrixSize-1);
}
void disp(int b[][maxn], int n)
{
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=n; j++)
			printf("%4d", b[i][j]);
		printf("\n");
	}		
}
int main()
{
	int n;
	scanf("%d", &n);
	Num(1, 1, n);
	disp(a, n);
	return 0;
}

相关文章:

  • 2021-08-15
  • 2022-12-23
  • 2022-01-02
  • 2022-01-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-14
  • 2022-12-23
  • 2022-01-13
  • 2021-11-03
  • 2021-07-10
相关资源
相似解决方案