一、问题描述:
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
二、思路分析:
本题可以通过random()方法将二维数组a[i][j]第一行确定好,由第一行来确定剩余的数组,所以思考时也是从第二行开始。
以上图i=j这一斜对角线为参考线,分两种情况:
(1)当j>=i时,用二维数组表示为a[i][j]=a[i-1][j-1]。
(2)当j<i时,在j=0时,与一行的数一一对应,即a[i][0]=a[0][i],
之后0<j<i的情况就与第一种情况相似。
三、代码部分:
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
//定义行和列数
int a=input.nextInt();
int b=input.nextInt();
//定义一个字符数组
char [][]n=new char[a][b];
//定义一个计数器,用来换行
int c = 0;
//从第一行找规律入手,所以先将第一行的内容确定
for(int j=0;j<b;j++){
n[0][j]=(char)(65+(int)(Math.random()*26));
}
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
if(j>=i&&j>0&&i>0){ //从列数大于行数做分界点,在这之后的数都为上一列数行数加1
n[i][j]=n[i-1][j-1];
}else if(j<i){
if(j==0&&i>0){
n[i][0]=n[0][i];
}else{
n[i][j]=n[i-1][j-1];
}
}
}
}
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
System.out.print(n[i][j]);
c++;
if(c%b==0){
System.out.println();
}
}
}
}
}
效果图: