描述
这个菱形大家熟悉吧。
*
***
*****
***
*
现在要求的是打印这样的菱形:不要*号,要最外层是字母A,然后里一层是B,再里一层是C···这样呢?
A
ABA
ABCBA
ABA
A
输入
第一行是一个正整数N(N≤25),代表有N组测试数据。
每一组数据包括一个正整数M(1≤M≤25),表示菱形的半径(直径就是M*2+1)。
输出
对于每组数据,输出要求打印的菱形。
样例输入
1
2
样例输出
A
ABA
ABCBA
ABA
A
方法一:
static Scanner scan=new Scanner(System.in);
int dd;
int isb;
public static void main(String[] args){
Test02 test2=new Test02();
int a=scan.nextInt();
while(a>0){
test2.start();
a--;
}
}
public void start(){
char c='A';
int a=1;
int b=0;
int d=scan.nextInt();
if((d+'A')>('A')&&(d+'A')<('Z'+1)){
recursion(a,b,c,d);
isb=-1;
dd=d;
recursion(a+d-1,0,c,1);
isb=0;
}
}
public void recursion(int a,int b,char c,int d){
if(b==a&&a>0){
return;
}
int i=b;
int g=0;
while(i<a){
if(i==0){
for(int j=0;j<d;j++){
System.out.print(" ");
}
}
int f=++i;
if(g<2){
System.out.print(c);
if(g<1){
recursion(a,f,(char)(c+1),d);
}
++g;
}
}
if(isb==0){
if(b==0){
System.out.println();
if(d>0){
a++;
recursion(a,b,c,d-1);
}
}
}
if(isb==-1){
if(b==0){
System.out.println();
if(d<=dd){
a--;
recursion(a,b,c,d+1);
}
}
}
}
方法二:
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int b=0;b<n;b++){
int m=sc.nextInt();
int h=(2*m+1)/2;
for(int i=0;i<=h;i++){
for(int j=h;j>i;j--){
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++){
if(j<(2*i+1)/2+1)
System.out.print((char)(65+j));
else
System.out.print((char)(65+(2*i+1)-j-1));
}
System.out.println();
}
for(int i=h;i>0;i--){
for(int j=0;j<=h-i;j++){
System.out.print(" ");
}
for(int j=0;j<2*(i-1)+1;j++){
if(j<(2*(i-1)+1)/2+1)
System.out.print((char)(65+j));
else
System.out.print((char)(65+(2*(i-1))-j));
}
System.out.println();
}
}
}