问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。
思路:先将AZ放入是a[26]中 举个例子看看 5行3列
n=5 m=3
行 | 字母 | j | k | 格式 |
---|---|---|---|---|
i=0 | a[0] a[1] a[2] | 无 | 2 | 先下后上 |
i=1 | a[1] a[0] a[1] | 无 | 1 | 先下后上 |
i=2 | a[2] a[1] a[0] | 无 | 0 | 先下后上 |
i=3 | a[3] a[2] a[1] | 1 | 无 | 只下不上 |
i=4 | a[4] a[3] a[2] | 2 | 无 | 只下不上 |
看出每行有两种格式
- 角标先下后上
- 角标只下不上
一个for循环代表行(用i)
两个for循环分别代表下上 (分别用j,k来表示每行最后一列是由谁决定)
由三四行看出 i>=j>=i-m+1 且 j>-1
由一二三行看出 1<=k<=m-i-1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int n = sc.nextInt();//接收行数
int m = sc.nextInt();//接收列数
//将A-Z放入a[]中
int[] a = new int[26];
char s = 'A';
for(int i=0;i<26;i++) {
a[i] = s+i;
}
//循环
for(int i=0;i<n;i++) {
for(int j=i;j>=i-m+1&&j>-1;j--) {
System.out.print((char)a[j]);
}
for(int k=1;k<=m-i-1;k++) {
System.out.print((char)a[k]);
}
System.out.println();
}
}
}