题解 | #蛇形矩阵#

蛇形矩阵

https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            //用于构造左上三角式的数组
            int m = n;
            //构造二维数组
            int[][] a = new int[n][n];

            //用于给首行元素计算其值
            int count = 1;
            //保存上一行的所有元素,给下一行的元素赋值
            int[] temp = new int[n];

            //两层构造左上三角式的数组
            for (int i = 0; i < n; i++) {
                int j = 0;
                //每行的元素个数为m个
                while (j < m) {
                    //首行元素赋值:求和公式
                    if (i == 0) {
                        a[i][j] = count * (count + 1) / 2;
                        temp[j]=a[i][j];//第一行保存到数组中
                        count++;
                        j++;
                    }else{
                        //其他行:取上一行元素减去1即可,从第2个开始取
                        a[i][j]=temp[j+1]-1;
                        temp[j]=a[i][j];//将本行元素保存,以便给下一行进行赋值
                        j++;
                    }

                }
                //下一行元素个数减1
                m--;
            }
            //打印数组的非0元素
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (a[i][j] != 0) {
                        System.out.print(a[i][j] + " ");
                    }
                }
                System.out.println();
            }
        }
    }
}

只会写左上三角矩阵的构造,对于数组值的构造是懵逼的,翻答案发现只有两个点能看懂,并据此写出了答案:1.首行元素符号等差数列和规律(与n有关),2.下行对应位置的元素值是上行元素去掉第一个后减一。根据i,j拼出答案的都是开天眼的神仙,数学巨魔

全部评论

相关推荐

11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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