想起来一道做过两次的竞赛题,明明之后重写了标程第二次还是想不起来怎么写了,愣是连续两次打表过(捂脸
题目: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;
}