题目:
输入整数N,输出一个N阶的回字形二维数组。
数组的最外层为1,次外层为2,以此类推。
输入格式:
输入包含多行,每行包含-个整数N。
当输入行为N = 0时,表示输入结束,且该行无需作任何处理。
输出格式:
对于每个输入整数N,输出一个满足要求的N阶二维数组。
每个数组占N行,每行包含N个用空格隔开的整数。每个数组输出完毕后,输出- -个空行。
数据范围:
0≤N< 100
例子如下:
1
1 1
1 1
1 1 1
1 2 1
1 1 1
1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1
方法:
从左上角开始先往右,再往下,再往左,最后向上转圈输入
转完一圈数字+1
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<iostream>
using namespace std;
const int A=101;
int arr[A][A],n,m;
int main()
{
int x=0,y=0;
int num=1;
cin>>n>>m;
arr[x][y]=num;
while(num < m * n)
{
while(y+1<m && !arr[x][y+1])
{
arr[x][++y]=num;
}
while(x+1<n && !arr[x+1][y])
{
arr[++x][y]=num;
}
while(y>0 && !arr[x][y-1])
{
arr[x][--y]=num;
}
while(x>0 && !arr[x-1][y])
{
arr[--x][y]=num;
}
num++;
}
for(int i=0;i<n;i++)
{
printf("\n");
for(int j=0;j<m;j++)
{
printf("%d",arr[i][j]);
}
}
return 0;
}
运行结果如下: