编程10x10的螺旋方阵顺时针方向 c语言,螺旋方阵(注:编程题库)Description输出n圈的螺旋方阵.Input只有一行且只有一个正整数:n ( 1 < n < 10 )Output从左上角开...

7d14a2b81882cfe4494b096a84150b2a.png 优质解答

我是用C++实现的,编程语言不是界限啦~

首先,我的思路是这样的:

首先 给一个12*12的数组 全部赋值 为0

然后 把中间那个10*10的区域 全部赋值为-1(这样外面一圈是0,中间一块是-1)

这样 问题就转化为,向中间一块值为-1的区域 填充合适的螺旋矩阵元素值 对吧?

好,然后填充的时候,初始方向为→

1. 按→方向填充,当数组元素值不是-1时,切换方向到 ↓

2. 继续沿 ↓ 填充,当数组元素值不是-1时,切换方向为←

3. 继续沿←填充,当数组元素值不是-1时,切换方向为 ↑

4. 继续沿 ↑ 填充,当数组元素值不是-1时,切换方向为→(回到第1步)

如果理解这个想法,那么编程就不是特别难,细心一点,调整控制游标就行~

下面是我自己写的代码,参考一下吧~

#include 

#include 

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 

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 <

break;

}

}

//打印数组

for( i = 1; i <= N; i++ )

{

//为了输出美观,我用了setfill('0')填充空位,你可以去掉

for( j = 1; j <= N; j++ )

cout <

cout <

}

}

return 0;

}

接下来,是运行结果截图(界面还是比较粗糙的.):

9f4fd321460104b29e87c02554d9c796.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值