输出螺旋方阵

在这里插入图片描述
挺有意思的一道考验思维的题,讲解见注释啦!

#include<iostream>
using namespace std;
int main(){
    
    
	int n,a[15][15],x=0,y=0;
	cin>>n;
	int b1=n-1,b2=n-1,b3=0,b4=1,dir=1;//1,2,3,4 分别代表右边界,下边界,左边界,上边界,注意初始化要正确哟~(dir 数字对应的方向与边界遵循同样的规则)
	int c=1;
	while(c<=n*n){
    
    
		if(dir==1){
    
    //向右走
			a[x][y++]=c++;
			if(y==b1){
    
    dir=2;b1--;}//走到了右边界就向下转向,同时缩小右边界(下面的判断分支思路类似,不再赘述)
		}
		else if(dir==2){
    
    
			a[x++][y]=c++;
			if(x==b2){
    
    dir=3;b2--;}
		}
		else if(dir==3){
    
    
			a[x][y--]=c++;
			if(y==b3){
    
    dir=4;b3++;}
		}
		else{
    
    
			a[x--][y]=c++;
			if(x==b4){
    
    dir=1;b4++;}
		}
	}
	for(int i=0;i<n;i++){
    
    
		for(int j=0;j<n;j++){
    
    
			printf("%3d",a[i][j]);//占三位输出
		}
		cout<<endl;
	}
	return 0;
}

测试:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/interestingddd/article/details/115215655