题目:
法一:
分析:
我们假设A = 0,B = 1,C = 2,……这时,5行7列的图形就变成了:
0123456
1012345
2101234
3210123
4321012
找规律,我们发现,某位置的数字 = 该数字所在行 与 所在列 的差值的绝对 值。例如:第二行第一列 1 就= 2-1 = 1。
代码实现:
import java.util.Scanner;
public class _03_字母图形_1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
for(int i = 0;i<n;i++) {
for(int j = 0;j<m;j++) {
char s = (char)(Math.abs(i-j)+'A');
System.out.print(s);
}
System.out.println();
}
}
}
运行结果:
法二:
分析:
这里我定义了一个二维数组,让其 n 行 m 列。以 5 行 7 列 为例,首先我让第一行字母分别为“A B C D E F G”。找规律我们可以发现如下图所示的现象。此外,每一行的第一列字母的 ASCII码 都是在上一行第一列字母的 ASCII码 上增1。
代码实现:
import java.util.Scanner;
public class _03_字母图形_2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
char [][] chars = new char[n][m];
for(int i = 0;i<m;i++) {
chars[0][i] = (char)(i+'A');
}
for(int i = 1;i<n;i++) {
for(int j = 1;j<m;j++) {
chars[i][j] = chars[i-1][j-1];
}
chars[i][0] = (char)(chars[i-1][0]+1);
}
for(int i = 0;i<n;i++) {
for(int j = 0;j<m;j++) {
System.out.print(chars[i][j]);
}
System.out.println();
}
}
}