输出N×N的螺旋方阵。每行N个数字,每个数字占3位。(N<10)

初学者的练习;如出现过于愚蠢的bug或好的修改可以评论        感谢;

#include<stdio.h>
int main() {
    int n,i,j,y=0;
    scanf("%d", &n);
    int x = n;
    int a[n][n];
    for(i = 0;i < n;i++){
        for(j = 0;j < n;j++){
            a[i][j] = 0;
        }
    }
    for (x = n; x > 0; x--) {
        for (i = y; i < x ; i++) {
            for (j = y; j < x ; j++) {
                if (i == y) {
                    a[i][j] += j + 1 - y;
                }
                else if (j == x- 1) {
                    a[i][j] += i + x - y - y;
                }
                else if (i == x  - 1 && j != x  - 1) {
                    a[i][j] += 3 * (x - 1 - y)  + 1 - j + y;
                }
                else if (j == y && i != y) {
                    a[i][j] += 4 * (x  - 1 - y) - i + 1 + y;
                }
                else {
                    a[i][j] += 4 * (x - 1 - y) ;
                }
            }
        }
        y++;
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            if(a[i][j] >0 && a[i][j] <= 9){
                printf("  %d", a[i][j]);
            }
            else if(a[i][j] >=10 && a[i][j] <= 99){
                printf(" %d", a[i][j]);
            }
            if (j == n - 1) {
                printf("\n");
            }
        }
    }
    return 0;
}

关于螺旋方阵可以看作多次输出的正方形框架在if四次判断中可以区分出是框架的哪一端;

对于y,x的问题因为在循环中改变会引起角标的改变进而对手写出的数学代码产生影响;

在此写出的x其实应该是框架最右行的序号进而因该在所有关于x的改变中减去y;(y是专门写来应对影响的)但同时i与j的初始变量的改变要求所有涉及i,j的改变都要减去y来消除影响;

写的麻烦也许有bug望见谅;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值