2.19 数圈

【问题描述】

1为中心,用2,3,4, ..., n, ..., n*n的数字围绕着中心输出数圈, 如若n=4,则

7 8 9 10

6 1 2 11

5 4 3 12

16 15 14 13

【输入形式】

一个整数n(1<=n<=10)

【输出形式】

数圈矩阵

【样例输入】

5

【样例输出】

21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13

#include <iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[n+2][n+2];//相当于给矩阵加一个框边,每次到达框边边缘就改变方向 
	for(int i=0;i<n+2;i++)
	{
		for(int j=0;j<n+2;j++)
		{
			if(i==0||j==0||i==n+1||j==n+1)
			a[i][j]=-1;//将框边初始化为-1 
			else
			a[i][j]=0;
		}
	}
	int x=0,y=0,value=n*n;//value为填充的值,因为是从最外边开始填,所以找到数圈结束的位置
	string dir;//判断下一步要填充的方向 
	if(n%2==1)//观察矩阵会发现如果n为奇数,矩阵数圈结束位置为右上角 
	{
		x=1;
		y=n;
		dir="left"; 
	}
	else if(n%2==0)//如果n为奇数,矩阵数圈结束位置为右上角  
	{
		x=n;
		y=1;
		dir="right"; 
	}
	while(value!=0)//逆时针进行填充 
	{
		a[x][y]=value;
		value--;
		if(dir=="left")
		{
			if(a[x][y-1]==0)
				y--;
			else
			{
				dir="down";
				x++;
			}
		}
		else if(dir=="down")
		{
			if(a[x+1][y]==0)
				x++;
			else
			{
				dir="right";
				y++;
			}
		}
		else if(dir=="right")
		{
			if(a[x][y+1]==0)
				y++;
			else
			{
				dir="up";
				x--;
			}
		}
		else if(dir=="up")
		{
			if(a[x-1][y]==0)
				x--;
			else
			{
				dir="left";
				y--;
			 } 
		}

	}
	for(int i=1;i<n+1;i++)
	{
		for(int j=1;j<n+1;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值