螺旋方阵(注:编程题库)Description输出n圈的螺旋方阵.Input只有一行且只有一个正整数:n ( 1 < n < 10 )Output从左上角开始,每个数据占用4个字符位置,按顺时针方向输出Sample Input3Sample Output1 2 3 4
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/06 19:49:07
![螺旋方阵(注:编程题库)Description输出n圈的螺旋方阵.Input只有一行且只有一个正整数:n ( 1 < n < 10 )Output从左上角开始,每个数据占用4个字符位置,按顺时针方向输出Sample Input3Sample Output1 2 3 4](/uploads/image/z/1106552-56-2.jpg?t=%E8%9E%BA%E6%97%8B%E6%96%B9%E9%98%B5%EF%BC%88%E6%B3%A8%EF%BC%9A%E7%BC%96%E7%A8%8B%E9%A2%98%E5%BA%93%EF%BC%89Description%E8%BE%93%E5%87%BAn%E5%9C%88%E7%9A%84%E8%9E%BA%E6%97%8B%E6%96%B9%E9%98%B5.Input%E5%8F%AA%E6%9C%89%E4%B8%80%E8%A1%8C%E4%B8%94%E5%8F%AA%E6%9C%89%E4%B8%80%E4%B8%AA%E6%AD%A3%E6%95%B4%E6%95%B0%EF%BC%9An+%28+1+%3C+n+%3C+10+%29Output%E4%BB%8E%E5%B7%A6%E4%B8%8A%E8%A7%92%E5%BC%80%E5%A7%8B%2C%E6%AF%8F%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8D%A0%E7%94%A84%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%BD%8D%E7%BD%AE%2C%E6%8C%89%E9%A1%BA%E6%97%B6%E9%92%88%E6%96%B9%E5%90%91%E8%BE%93%E5%87%BASample+Input3Sample+Output1+2+3+4)
螺旋方阵(注:编程题库)Description输出n圈的螺旋方阵.Input只有一行且只有一个正整数:n ( 1 < n < 10 )Output从左上角开始,每个数据占用4个字符位置,按顺时针方向输出Sample Input3Sample Output1 2 3 4
螺旋方阵(注:编程题库)
Description
输出n圈的螺旋方阵.
Input
只有一行且只有一个正整数:n
( 1 < n < 10 )
Output
从左上角开始,每个数据占用4个字符位置,按顺时针方向输出
Sample Input
3
Sample Output
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
Source
基础题
螺旋方阵(注:编程题库)Description输出n圈的螺旋方阵.Input只有一行且只有一个正整数:n ( 1 < n < 10 )Output从左上角开始,每个数据占用4个字符位置,按顺时针方向输出Sample Input3Sample Output1 2 3 4
我是用C++实现的,编程语言不是界限啦~
首先,我的思路是这样的:
首先 给一个12*12的数组 全部赋值 为0
然后 把中间那个10*10的区域 全部赋值为-1(这样外面一圈是0,中间一块是-1)
这样 问题就转化为,向中间一块值为-1的区域 填充合适的螺旋矩阵元素值 对吧?
好,然后填充的时候,初始方向为→
1. 按→方向填充,当数组元素值不是-1时,切换方向到 ↓
2. 继续沿 ↓ 填充,当数组元素值不是-1时,切换方向为←
3. 继续沿←填充,当数组元素值不是-1时,切换方向为 ↑
4. 继续沿 ↑ 填充,当数组元素值不是-1时,切换方向为→(回到第1步)
如果理解这个想法,那么编程就不是特别难,细心一点,调整控制游标就行~
下面是我自己写的代码,参考一下吧~
#include <iostream>
#include <iomanip>
using namespace std;
int a[12][12];
int main() {
int N;
int cnt;
int i, j; //数组操作的下标
int dir;
int k, p; //填充操作的游标
while( cin >> N ) {
cnt = 0; //待填充的值
//1. 将数组全部初始化为0
memset( a, 0, sizeof(a) );
//2. 再将中间的方块[1...N][1...N]初始化为-1
// 这样,任务就转化为,将中间值为-1的部分填充为合适的螺旋矩阵元素
for( i = 1; i <= N; i++ )
for( j = 1; j <= N; j++ )
a[i][j] = -1;
//方向向量,指定螺旋填充方向
dir = 0;
k = 1;
p = 1;
while( cnt < N*N ) { //当填充的值cnt涨到N*N时,填充完毕后退出循环...
switch( dir ) {
//方向值dir为0,从左向右填充 数组a[][]中值为-1的部分
case 0:
a[k][p++] = ++cnt;
if( a[k][p] != -1 ) {
dir = 1;
p--;
k++;
}
break;
//方向值dir为1时...下面类似
case 1:
a[k++][p] = ++cnt;
if( a[k][p] != -1 ) {
dir = 2;
p--;
k--;
}
break;
case 2:
a[k][p--] = ++cnt;
if( a[k][p] != -1 ) {
dir = 3;
k--;
p++;
}
break;
case 3:
a[k--][p] = ++cnt;
if( a[k][p] != -1 ) {
dir = 0;
p++;
k++;
}
break;
default:
cout << "Error..." << endl;
break;
}
}
//打印数组
for( i = 1; i <= N; i++ )
{
//为了输出美观,我用了setfill('0')填充空位,你可以去掉
for( j = 1; j <= N; j++ )
cout << setfill('0') << setw(2) << a[i][j] << " ";
cout << endl;
}
}
return 0;
}
接下来,是运行结果截图(界面还是比较粗糙的.):