当前位置: 代码迷 >> 综合 >> 顺时针螺旋打印二维数组
  详细解决方案

顺时针螺旋打印二维数组

热度:90   发布时间:2024-02-12 05:27:11.0

想起来一道做过两次的竞赛题,明明之后重写了标程第二次还是想不起来怎么写了,愣是连续两次打表过(捂脸

题目:1,2,3…n*n 的数字按照顺时针螺旋的形式打印成矩阵,如下:

输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1     2    3    4
12  13  14  5
11  16  15  6
10   9    8   7

 

思路:用递归的方式从外向内顺时针打印每一圈,模拟顺时针转动时x和y的坐标位置即可

代码:

#include<iostream>
using namespace std;int a[105][105];void fun(int n,int num,int x,int y)
{int i;a[x][y]=num++;if(n==0||n==1)return ;for(i=0;i<n-1;i++)		//上 {y++;a[x][y]=num++;}for(i=0;i<n-1;i++)		//右 {x++;a[x][y]=num++;}	for(i=0;i<n-1;i++)		//下 {y--;a[x][y]=num++;}for(i=0;i<n-2;i++)		//左 {x--;a[x][y]=num++;}fun(n-2,num,x,y+1);  
}int main()
{int n,i,j;cin>>n;fun(n,1,0,0);for(i=0;i<n;i++){for(j=0;j<n;j++){if(j)cout<<" ";cout<<a[i][j];}cout<<endl;}return 0;
}

 

  相关解决方案