输出米字形 Java
资源限制
时间限制:1.0s 内存限制:512.0MB
根据输入的正整数n (1 米字形由一个(2n-1)*(2n-1)的矩阵组成,矩阵包含从大写A开始的n个字母
例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。
矩阵的正中间为n个字母中字典序最大的那个,从这个字母开始,沿着西北、正北、东北、正西、正东、西南、正南、东南八个方向各有一条由大写字母组成的直线。并且直线上的字母按字典序依次减小,直到大写字母A。
矩阵的其它位置用英文句号.填充。
代码:
import java.util.Scanner;
public class 输出米字形
{
public static void main(String[] args) {
// 根据输入的正整数n (1 米字形由一个(2n-1)*(2n-1)的矩阵组成,矩阵包含从大写A开始的n个字母
// 例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
char[] zif=new char[n];
char[][] mi=new char[2*n-1][2*n-1];
for (int i = 0; i < zif.length; i++)
{
zif[i]=(char) ('A'+i);
}
//循环初始化
for (int i = 0; i < mi.length; i++)
{
for (int j = 0; j < mi.length; j++)
{
mi[i][j]='.';
}
}
//循环对角线输入左上到右下
for (int i = 0,j=0; i < mi.length; i++)
{
if (i<n)
{
mi[i][i]=zif[j];
j++;
}else if (i==n)
{
j=j-2;
mi[i][i]=zif[j];
}else{
j--;
mi[i][i]=zif[j];
}
}
//循环对角线输入右上到左下
for (int i=0, z= mi.length-1,j=0; i < mi.length; i++,z--)
{
if (i<n)
{
mi[z][i]=zif[j];
j++;
}else if (i==n)
{
j=j-2;
mi[z][i]=zif[j];
}else{
j--;
mi[z][i]=zif[j];
}
}
//循环对角线输入垂直中间上到下
int x=mi.length/2;
for (int i = 0,j=0; i < mi.length; i++)
{
if (i<n)
{
mi[i][x]=zif[j];
j++;
}else if (i==n)
{
j=j-2;
mi[i][x]=zif[j];
}else{
j--;
mi[i][x]=zif[j];
}
}
//循环对角线输入水平中间左到右
int y=mi.length/2;
for (int i = 0,j=0; i < mi.length; i++)
{
if (i<n)
{
mi[y][i]=zif[j];
j++;
}else if (i==n)
{
j=j-2;
mi[y][i]=zif[j];
}else{
j--;
mi[y][i]=zif[j];
}
}
//循环打印输出
for (int i = 0; i < mi.length; i++)
{
for (int j = 0; j < mi.length; j++)
{
System.out.print(mi[i][j]);
}
System.out.println();
}
}
}
样例输入:
3
样例输出:
A.A.A
.BBB.
ABCBA
.BBB.
A.A.A
样例输入:
4
样例输出:
A..A..A
.B.B.B.
..CCC..
ABCDCBA
..CCC..
.B.B.B.
A..A..A