大佬们帮忙看一下 最好通俗易懂点的 萌新有些看不懂

问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:

ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。

简单说:给你两个参数,就叫你写一个循环。
参数m:表示每行显示m个字母
参数n:表示循环n次

 #include <stdio.h>

int main()
{
    //1.获取 n,m
    int n,m;
    printf("请输入n:");scanf("%d",&n);
    printf("请输入m:");scanf("%d",&m);

    //2.获取需要打印的字母
    char letter[m];
    for(int i = 0 ; i < m; i++){
        letter[i] = (char)('A' + i);
    }

    //3.打印n行
    for(int i = 0 ; i < n ; i++){
        //4.打印m列
        //列的前一半
        for(int j = i ; j > 0 ; j--){
           printf("%C",letter[j]); 
        }
        //列的后一半
        for(int j = 0 ; j < m-i ; j++){
           printf("%C",letter[j]); 
        }
        printf("\n");
    }
    return 0;
}

类似
\\
\\
\\

横向 1234567 m = 7
纵向 12345 n = 5

12345
21234
32123
43212

        int m = 30,n = 30;
//      if(n < 1 || m > 26) return;
        char[] letter = new char[26];
        for(int i = 0 ; i < 26; i++){
            letter[i] = (char)('A' + i);
        }
        for(int i = 0 ; i < n ; i ++){
            int temp = 0;//记录输出个数
            for(int j = i; j > 0 && temp < m; j --,temp++){
                System.out.print(letter[j % 26]);
            }
            for(int j = 0; j < m - i && temp < m ; j++,temp++){
                System.out.print(letter[j % 26]);
            }
            System.out.println();
        }

先反向输出 行数 - 1 个 字符
再正向输出 m - 行数 + 1 个字符
别的我说不出 数学不好