题解 | #回型矩阵#

回型矩阵

https://www.nowcoder.com/practice/36d5dfddc22c4f5b88a5b2a9de7db343

#include <stdio.h>
//回型数组
int main() {
    int a;
    scanf("%d", &a);
    int arr[20][20] = { 0 };
    int i = 0;
    int j = 0;
    int k = 1;
    int i_ = 0;
    int j_ = 0;
    while (k <= a * a) {
        //当j_为0并且i_为0 的时候  列数增加
        if (j_ == 0 && i_ == 0) {
            arr[i][j] = k++;
            j++;
            if (j == a || arr[i][j] != 0) {
                j_ = 1;/*当到最右边了 或者 下一个位置有数字了 将j_设置为1 不让它继续以这种方式增加*/
                j--;/*因为先j++再判断的 所以 判断为真后 要在减回去*/
                i++;/*i++意思是这一列的下一行*/
            }
        }//当i_为0 的时候  行数增加
        else if (i_ == 0 ) {
            arr[i][j] = k++;
            i++;
            if (i == a || arr[i][j] != 0) {
                i_ = 1;/*当到最下面了 或者 下一个位置有数字了 将i_设为 1 不让它继续以这种方式增加*/
                i--;/*因为先i++再判断的 所以 判断为真后 要在减回去*/
                j--;/*这一行的前一列*/
            }
        }//当j_为1的时候 列数减少
        else if (j_ == 1) {
            arr[i][j] = k++;
            j--;
            if (j == -1 || arr[i][j] != 0) {
                j_ = 0;/*当到最左边了 或 下一个位置有数字 将j_设置为0 不让它继续以这种方式减少*/
                j++;/*因为先j--再判断的 所以 判断为真后 要在加回去*/
                i--;/*这一列的前一行*/
            }
        } else if (i_ == 1) {
            arr[i][j] = k++;
            i--;
            if (i == -1 || arr[i][j] != 0) {
                i_ = 0;/*当到最上边了 或 下一个位置有数字 将i_设置为0 不让它继续以这种方式减少*/
                i++;/*因为先i--再判断的 所以 判断为真后 要在加回去*/
                j++;/*这一行的下一列*/
            }
        }
    }
    for (i = 0; i < a; i++) {
        for (j = 0; j < a; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }



    return 0;
}

全部评论

相关推荐

10-28 10:48
已编辑
门头沟学院 Java
孩子我想要offer:发笔试后还没笔试把我挂了,然后邮箱一直让我测评没测,后面不知道干嘛又给我捞起来下轮笔试,做完测评笔试又挂了😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务