纠错
  • 板块学术版
  • 楼主wzliyiming
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/2/5 15:16
  • 上次更新2023/10/28 09:39:34
查看原帖
纠错
560716
wzliyiming楼主2022/2/5 15:16

题目描述

螺旋方阵

输入

一个整数n(0<n<10)

输出

一个n行方阵,每行n个数,每个数场宽为3

样例输入 
5
样例输出 
 1  2  3  4  5
16 17 18 19  6
15 24 25 20  7
14 23 22 21  8
13 12 11 10  9
#include<bits/stdc++.h>
using namespace std;
int a[15][15];
int x=1,y,noww;
int n;
void up(){
	while(a[x-1][y]==0&&x>0&&y>0&&x<n&&y<n){
		a[x][y]=++noww;
		x--;
	}
	a[x][y]=noww;
	return ;
}
void right(){
	while(a[x][y+1]==0&&x>0&&y>0&&x<n&&y<n){
		a[x][y]=++noww;
		y++;
	}
	a[x][y]=noww;
	return ;
}
void left(){
	while(a[x][y-1]==0&&x>0&&y>0&&x<n&&y<n){
		a[x][y]=++noww;
		y--;
	}
	a[x][y]=noww;
	return ;
}
void down(){
	while(a[x+1][y]==0&&x>0&&y>0&&x<n&&y<n){
		a[x][y]=++noww;
		x++;
	}
	a[x][y]=noww;
	return ;
}
int main(){
	cin>>n;
	y=noww=n;
	for(int i=1;i<=n;i++)a[1][i]=i;
	for(int i=1;i<=2*n-2;i++){
		if(x==1&&y==n){
			for(int j=2;j<=n;j++){
				a[j][n]=++noww;
				x++;
			}
			continue;
		}
		
		if(x==n&&y==n){
			for(int j=n-1;j>=1;j--){
				a[n][j]=++noww;
				y--;
			}
			continue;
		}
		if(x==n&&y==1){
			for(int j=n-1;j>1;j--){
				a[j][n]=++noww;
				x--; 
			}
			continue;
		}
		if(x==2&&y==1){
			right();
			continue;
		}
		if(a[x-1][y]==0){
			up();
			continue;
		}
		if(a[x+1][y]==0){
			down();
			continue;
		}
		if(a[x][y-1]==0){
			left();
			continue;
		}
		if(a[x][y+1]==0){
			right();
			continue;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]<10)cout<<"  ";
			else cout<<' ';
			cout<<a[i][j];
		}
		cout<<endl;
	}
	return 0;
}```
2022/2/5 15:16
加载中...