首页 > 试题广场 >

蛇形矩阵

[编程题]蛇形矩阵
  • 热度指数:169051 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。

例如,当输入5时,应该输出的三角形为:

1 3 6 10 15

2 5 9 14

4 8 13

7 12

11



输入描述:

输入正整数N(N不大于100)



输出描述:

输出一个N行的蛇形矩阵。

示例1

输入

4

输出

1 3 6 10
2 5 9
4 8
7
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int[][] arr = new int[num][num];

        for(int i = 0 ; i<num ;i++){
            arr[i][0] = (i*(i+1)/2)+1;
            System.out.print(arr[i][0] + " ");
            for(int j = 1;j<num - i;j++){
               arr[i][j] = arr[i][j-1] + (i+j+1);
               System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
  
    }
}

发表于 2024-04-25 22:49:50 回复(0)
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 a = 1;
            String str = "";
            for (int i = 1; i < N; i++) {
                if (i == 1) {
                    str += String.valueOf(a) + " ";
                }
                a = a + i + 1;
                str += String.valueOf(a) + " ";
            }
            str = str.trim();
            System.out.println(str);
            for (int i = 0; i < N - 1; i++) {
                if (str.length() > 3) {
                    int go = 0;
                    for (int k = 0; k < str.length(); k++) {
                        if (str.charAt(k) == ' ') {
                            go = k;
                            break;
                        }
                    }
                    str = str.substring(go, str.length());
                    str = str.trim();
                } else {
                    str = str.charAt(str.length() - 1) + "";
                }
                String[] ss = str.split(" ");
                String temp = "";
                for (int j = 0; j < ss.length; j++) {
                    int  get =  Integer.parseInt(ss[j]) - 1;
                    temp += String.valueOf(get) + " ";
                }
                temp = temp.trim();
                System.out.println(temp);
                str = temp;
            }
        }
    }
}

编辑于 2024-04-16 22:39:52 回复(0)
import java.util.Scanner;

import java.util.Arrays;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int size = in.nextInt();
        int[][] martix = new int[size][size];
        int number = 1;
        for (int i = 0; i < size; i++) {
            for (int j = 0; j <= i; j++) {
                martix[i - j][i] = number;
                number++;
            }
        }
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                if (martix[i][j] == 0) {
                    continue;
                } else {
                    System.out.print(martix[i][j] + " ");
                }
            }
            System.out.println("");
        }
    }
}

编辑于 2024-03-26 17:08:17 回复(0)
import java.util.Scanner;
/**
输入:
4
复制
输出:
1 3 6 10
2 5 9
4 8
7
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < n; i++) {
            if (i == 0) {
                arr[0] = 1;
                for (int j = 1; j < n; j++) {
                    arr[j] = arr[j - 1] + j + 1;
                }
            } else {
                for (int k = i; k < n; k++) {
                    arr[k] -= 1;
                }
            }
            for (int k = i; k < n; k++) {
                builder.append(arr[k] + " ");
            }
            builder.append("\n");
        }
        System.out.println(builder.toString().trim());
    }
}

发表于 2024-03-09 18:44:43 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int a = in.nextInt();
            for (int i = 0, num = 0; i < a; i++, num += i) {
                int sum = num; // 重置sum
                for (int j = 0; j < a - i; j++) { // 第i行有a - i个元素
                    if (j == 0) { // 第一列
                        sum += j + 1; // 计算第1列的元素 i和j从0开始
                    }else { // 计算行
                        sum += i + j + 1; // 计算当前行后续元素
                    }
                    System.out.print(sum + " ");
                }
                System.out.println();
            }
        }
    }
}

编辑于 2024-02-29 20:44:32 回复(0)
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 num = in.nextInt();
            int mark = num;//通过mark-- 去控制每一行的数量
            String res = "";
            int first = 1;//第一列的数
            int firstmid = 0;//第一列的中间值  1 2 3
            for (int i = 1; i <= num; i++) {
                int mid = i;//第一行的中间值 2 3 4
                first += firstmid;
                int next = first;
                //拼接每一行
                for (int j = 1; j <= mark; j++) {
                    if (j > 1) {
                        next += mid;
                        res += " " + next;
                    } else {
                        res += next;
                    }
                    mid++;
                }
                System.out.println(res);
                res = "";
                firstmid++;
                mark--;
            }

        }
    }
}

编辑于 2024-01-03 17:42:04 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int d = 1, c1 = 0;
        for(int i = 0; i < n; i++){
            d += c1++;
            int c2 = i+2, b = d;
            for(int j = i; j < n; j++){
                System.out.print(b + " ");
                b += c2++;
            }
            System.out.println();
        }
    }
}

发表于 2023-11-23 21:53:54 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = 1;
        for(int i=0; i<a; i++){
            b += i;
            int c = 2+i;
            int d = b;
            for(int j=i; j<a; j++){
                System.out.print(d+" ");
                d += c;
                c++;
            }
            System.out.println();
        }
    }
}

发表于 2023-10-26 15:52:44 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int len=Integer.valueOf(in.nextLine());
        int arr[][]=new int[len][len];
        int start=0;
        for(int i=0;i<len;i++){
            int i2=i;
            for(int j=0;i2>=0;j++){
                start++;
                arr[i2][j]=start;
                i2--;
            }
        }
        for(int i=0;i<len;i++){
            for(int j=0;j<len-i;j++){
                if(j==len-i-1){
                    System.out.println(arr[i][j]);
                }else{
                    System.out.print(arr[i][j]+" ");
                }
            }
        }
    }
}

发表于 2023-09-18 18:37:54 回复(1)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int a = in.nextInt();
        //每行第一个数字
        int first = 0;
        // 外层循环一共有多少行
        for (int i = 0; i < a; i++) {
            int sum = 0;
            //内层循环每行有多少个数字
            for (int j = i; j < a; j++) {
                if (sum == 0) {
                    //每行第一个数字规则
                    first += j;
                    sum = first + 1;
                } else {
                    //每行除第一个之外的数字规则
                    sum += j + 1;
                }
                //打印数字
                System.out.print(sum + " ");
            }
            //换行
            System.out.println();
        }
    }
}

发表于 2023-05-30 13:30:47 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int index=in.nextInt();
        // 注意 hasNext 和 hasNextLine 的区别
        int arr[][]=new int[100][100];
        arr[0][0]=1;
        int row=2;
        int col=1;
        //生成第一行、第一列蛇形矩阵
        for(int i=1;i<100;i++){
            arr[0][i]=arr[0][i-1]+row;
            row+=1;
            arr[i][0]=arr[i-1][0]+col;
            col+=1;
        }
        //开始双重循环创建蛇形矩阵100×100
        int begin=2;
        for(int i=1;i<100;i++){
            row=begin;
            for(int j=1;j<100;j++){
                arr[i][j]=arr[i-1][j]+row;
                row+=1;
            }
            begin++;
        }
        //flag表示当前行输出有多少列
        int flag=index;
        for(int i=0;i<index;i++){
            for(int j=0;j<flag;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
            flag--;
        }
    }
}

发表于 2023-05-28 09:47:11 回复(0)
public class Test01 {
    public static void main(String[] args) {
        /*
            找出值与下标的规律:
            arr[0][0]=1
            arr[i][0]=i+arr[i-1][0]
            arr[i][j]=arr[i][j-1]+i+j+1
         */
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int[][] arr = new int[n][n];
            for (int i = 0; i < arr.length; i++) {
                if(i==0){
                    arr[0][0]=1;
                }else{
                    arr[i][0]=i+arr[i-1][0];
                }
                System.out.print(arr[i][0]+" ");
                for (int j = 1; j < arr[0].length-i; j++) {
                    arr[i][j]=arr[i][j-1]+i+j+1;
                    System.out.print(arr[i][j]+" ");
                }
                System.out.println();
            }
        }
    }
}

发表于 2023-05-16 17:32:56 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int high = in.nextInt();
        int begin = 1;
        for (int i = 1; i <= high; i++) { // 控制几行
            int b = begin;
            for (int j = i; j <= high; j++) { // 控制几列
                System.out.print(b + " ");
                b = b + j + 1;
            }
            begin = begin + i;
            System.out.println("");
        }
    }
}

发表于 2023-04-08 14:48:21 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] arr = new int[n][n];
        int seg1 = 1, seg3 = 1;
        for(int i = 0; i < n; i++){
            int seg2 = seg3;
            for(int j = 0; j < n; j++){
                if(j == 0)
                    arr[i][j] = seg1;
                else
                    arr[i][j] = arr[i][j-1] + seg2;
                seg2++;
            }
            seg1 += seg3;
            seg3++;
        }
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n - i; j++){
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

发表于 2023-04-07 22:08:42 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();

        int num[][] = new int[a][a];

        for(int i = 0; i < a; i++) {
            for(int j = 0; j < a; j++){
                if(i == 0) {
                    if(j == 0) {
                        num[i][j] = 1;
                    }else{
                        num[i][j] = num[i][j-1] + (j+1);
                    }
                }else{
                    if (j < a-i){
                        num[i][j] = num[i-1][j+1] - num[0][0];
                    }
                }
            }
        }

        for(int i = 0; i < a; i++) {
            for(int j = 0; j < a; j++){
                if(num[i][j] != 0){
                    System.out.print(num[i][j] + " ");
                }
            }
            System.out.println();
        }
    }
}
发表于 2023-03-29 16:13:53 回复(0)
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 a = in.nextInt();
            int[][] arr=new int[a][];
            int columnStart=1;
            for(int i=0;i<a;i++){
                arr[i]=new int[a-i];
                columnStart=columnStart+i;
                arr[i][0]=columnStart;
                System.out.print(arr[i][0]+" ");
                int num=columnStart;
                for(int j=1;j<arr[i].length;j++){
                    arr[i][j]=num+i+j+1;
                    num=arr[i][j];
                    System.out.print(arr[i][j]+" ");
                }
                System.out.println();

            }
        }
    }
}


发表于 2023-03-04 23:57:54 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int num =in.nextInt();
        // 暴力拆解法
        int[] arr=new int[num];
        int step=1;
        for(int i=0;i<num;i++){
            if(i>0) arr[i]=arr[i-1]+step;
            else arr[i]=i+step;
            step++;
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        int y=1;
        for(int i=1;i<num;i++){
            for(int j=i;j<num;j++){
                System.out.print(arr[j]-y+" ");
            }
            y++;
            System.out.println();
        }
    }
}

发表于 2023-02-01 11:07:48 回复(0)
import java.io.*;//蛇形矩阵,利用二维数字组斜线方向每个循环下标规律控制数字的填入顺序
/**
使用方法:Integer.parseInt(s.readLine());br.append(arr[i][j]).append(" ");
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(s.readLine());//使用Integer不用导包
        int[][] arr = new int[n][n];
        int num = 1;
        for (int i = 0; i < n; i++) {
            int count = i;
            while (count >= 0) {
                arr[count][i - count] = num;
                count--;
                num++;
            }
        }
        for (int i = 0; i < n; i++) {
            StringBuilder br=new StringBuilder();
            for (int j = 0; j < n; j++) {
                if (arr[i][j] != 0) {
                    br.append(arr[i][j]).append(" ");
                }
            }
            System.out.println(br);
        }
    }
}

发表于 2023-01-20 16:53:43 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int start = 1;
        // 注意行号 每行起点 每行循环次数和输入值的关系
        for(int i = 1; i<=n; i++) {
            start = start + i - 1;
            System.out.print(start + " ");
            for(int j = i + 1,val = start; j <= n; j++) {
                val = val + j;
                System.out.print(val + " ");
            }
            System.out.println();
        }
    }
}

发表于 2023-01-15 20:19:19 回复(0)