对角线一条一条输出矩阵

该博客介绍了如何按照特定顺序输出矩阵的对角线元素,例如从左上到右下,然后转到右上到左下。文章讨论了如何通过坐标变化确保每条线上的元素和相等,并提到可以通过坐标大小变化来判断转向。作者表示这个方法仍有优化空间。

[1,2,3,4]

[5,6,7,8]

[9,10,11,12]

按1 2 5 9 6 3 10 7 4 11 8 12 顺序输出

a b 都是 0 0 位置,a 一直向右,b 一直向下,a不能向右的时候,开始向下,b 不能向下的时候,开始向右。每次都连接成为一条直线。每条线上的横纵坐标的值的和是一样的。如果需要判断方向的,我觉得应该是通过坐标的大小来判断,如果上一次由小到大,下一次由大到小。

这个还需要优化,我真的是太菜了。

package com.example.demo.study.huawei;

public class snakeprintMatrix {
    public static void  main(String args[]) {
//        Scanner scanner=new Scanner(System.in);
//        while(scanner.hasNext()){
//            int[][]=new int[];
//        }
        int[][] mat = new int[][]{
  
  {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
        printMatrix(mat);
    }
    public static void printMatrix(int[][] mat) {
        int x = 0;
        int y = 0;
        int m = 0;
        int n = 0;
        System.out.println("mat维度" + mat.length);
        System.out
### 3.1 获取矩阵对角线上方斜线元素的方法 在 MATLAB 中,可以通过 `diag` 函数结合偏移量来获取矩阵的副对角线及其上方斜线的元素。对于一个方阵 `A`,`diag(A, k)` 函数可以提取从主对角线向右上方向偏移 `k` 条斜线的元素。类似地,也可以提取左下方向的斜线元素。 若要提取副对角线(即从右上到左下的对角线)上的元素,可以先将矩阵沿列方向翻转,再使用 `diag` 函数提取主对角线元素: ```matlab A = [1, 2, 3; 4, 5, 6; 7, 8, 9]; % 提取副对角线元素(从右上到左下) anti_diag = diag(flipud(A)); % 提取副对角线上方第1条斜线的元素 anti_diag_upper = diag(flipud(A), 1); ``` 上述代码中,`flipud(A)` 将矩阵 `A` 沿垂直方向翻转,使副对角线变为主对角线,然后通过 `diag` 函数提取所需斜线的元素[^1]。 --- ### 3.2 示例:提取不同偏移位置的副对角线元素 以下示例演示如何提取副对角线及其上下偏移的斜线元素: ```matlab A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12; 13, 14, 15, 16]; % 副对角线元素 anti_diag_main = diag(flipud(A)); % 输出 [4; 7; 10; 13] % 副对角线上方第一条斜线 anti_diag_upper_1 = diag(flipud(A), 1); % 输出 [3; 6; 9] % 副对角线下方第一条斜线 anti_diag_lower_1 = diag(flipud(A), -1); % 输出 [5; 10; 15] ``` 该方法适用于任意大小的方阵,并可通过调整偏移值 `k` 来提取不同位置的斜线元素。 --- ### 3.3 构造包含副对角线矩阵 如果需要构造一个仅保留副对角线及其上方斜线元素的新矩阵,可以结合索引操作和 `diag` 函数: ```matlab A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12; 13, 14, 15, 16]; % 创建与A相同大小的零矩阵 B = zeros(size(A)); % 获取副对角线及其上方第一条斜线的索引 for k = 0:1 idx = diag(logical(ones(size(A,1)-abs(k),1)), k); B(flipud(idx)) = A(flipud(idx)); end ``` 此代码构造了一个新矩阵 `B`,其中只保留原始矩阵 `A` 的副对角线及其上方第一条斜线的元素。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值