二维数组遍历S型副对角线方向

#include <iostream>

int main() {
    int A[100][100] = {0};
    int n;
    std::cin >> n;
    int i=0,j=n-1,k=1;
    bool a=0;//这里通过a区分不同情况
    while (i!=n-1||j!=0)
    {
        if(j>=i)
        {
            A[i][j--] = k++;
            while (j != n - 1)
                A[i++][j++] = k++;
            if (i != n - 1)//这里分情况判断,如果i=n-1说明已经到二维数组的对角线的最后一个位置
                {
                A[i++][j] = k++;
                while (i != 0)
                    A[i--][j--] = k++;
                if(i==0&j==0)
                    a=1;
            } else
                a=0;
        }
            if (j <= i && a) {
                A[i++][j] = k++;
                while (i != n - 1)
                    A[i++][j++] = k++;
                if(j!=0)
                A[i][j--] = k++;
                while (j != 0)
                    A[i--][j--] = k++;
            }
            if (j <= i && !a) {
                A[i][j--]=k++;
                while (j != 0)
                    A[i--][j--] = k++;
                if(i!=n-1)
                A[i++][j] = k++;
                while (i != n - 1)
                    A[i++][j++] = k++;
            }
        if(i==n-1&&j==0)
            A[i][j]=k;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            printf("%3d", A[i][j]);
        printf("\n");
    }
    return 0;
}

输入7 
 28 16 15  7  6    2   1
 29 27 17 14  8   5   3
 39 30 26 18 13  9   4
 40 38 31 25 19 12 10
 46 41 37 32 24 20 11
 47 45 42 36 33 23 21
 49 48 44 43 35 34 22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值