螺旋方阵(注:编程题库)Description输出n圈的螺旋方阵.Input只有一行且只有一个正整数:n ( 1 < n < 10 )Output从左上角开始,每个数据占用4个字符位置,按顺时针方向输出Sample Input3Sample Output1 2 3 4

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 19:49:44
螺旋方阵(注:编程题库)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 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;
}
 
 
接下来,是运行结果截图(界面还是比较粗糙的.):

 

螺旋方阵(注:编程题库)Description输出n圈的螺旋方阵.Input只有一行且只有一个正整数:n ( 1 < n < 10 )Output从左上角开始,每个数据占用4个字符位置,按顺时针方向输出Sample Input3Sample Output1 2 3 4 java程序问题?下面是一个 5*5 的螺旋方阵(顺时针方向旋转)编程输出 10*10(n java编程题1) 显示螺旋方阵.螺旋方阵将1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列. DO you want to know any 什么(descript)words? 求解答C语言编程题,尽量给出详细解答过程因为我毫无头绪下面是一个5接的螺旋方阵,试编程打印出此形式的n(n 数孔铣螺旋铣外圆宏程序的螺旋铣怎样编程,里面的符号怎样表示. 一个关于螺旋方阵的问题以下是一个5 x 5阶的螺旋方阵,设计一个算法输出该形式的n x n(n C语言中按照以下方阵示例生成一个由自然数1~N的2次方组成的N阶方阵 写两段程序 (1)1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 17 21 24 15 16 22 23 25(2)按以下示例方阵格式,生成一个螺旋方式排列的由 【程序功能】 将一个n阶方阵(n为偶数)分为四个n/2阶子方阵,然后将4个子方阵按顺时钟方向轮转一次.【编程要求】 1)编写函数void cycle(int a[][10],int m).函数功能:将a指向的数组中存储的n阶方 请高手赐教:求C++中构造螺旋方阵的程序.谢谢.(所谓螺旋方阵,见详细提问)比如说输入一个4,则输出1 2 3 412 13 14 511 16 15 610 9 8 7若输入9,则输出1 2 3 4 5 6 7 8 932 33 34 35 36 37 38 39 1031 56 57 58 59 60 VB编程:求出5*5方阵中每行最小数并输出. 新题新题库句子答案(六年级), 舞蹈队排成一个方阵,最外层的人数为60人,这个方阵共有多少人?(注:) 编程, 程序设计:螺旋方阵!建立如图所示的9*9阶的顺时针螺旋方阵设计要求:要求由程序自动生成螺旋方阵,用数组来实现此题 1 2 3 4 5 6 7 8 9 32 33 34 35 36 37 38 39 10 31 56 57 58 59 60 61 40 11 30 55 72 73 74 75 62 螺旋测微器怎样读数?(要有图示) 粗准焦螺旋和细准焦螺旋的作用粗准焦螺旋:( )范围调整观察物象的适当距离细准焦螺旋:( )范围调整观察物象的适当距离 free pascal 打印一个n*n的数字螺旋方阵.打印一个n*n的数字螺旋方阵.这个数字方阵的特点是:以左上角1开始向下,数字以外圈向里按自然数顺序转圈递增,一直到中心位置的n2为止.例如n =3:1 8 72 9