问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
样例输入2
3
样例输出2
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
-----------------------------------------------------------------------------------------
这道题没什么难度,研究一下位置之间的关系,然后处理一下细节。我是先从外面一层一层画边框,最后在画十字架
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
int cow = 9 + (n - 1) * 4;
int row = 9 + (n - 1) * 4;
char[][] arr = new char[row][cow];
for (int i = 0; i < n; i++) {
Border(arr, i * 2);
}
graphCentre(arr, n * 2);
printArr(arr);
}
public static void printArr(char[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int s = 0; s < arr.length; s++)
System.out.print(arr[i][s]);
System.out.println();
}
}
//画边框
public static void Border(char[][] arr, int num) {
for (int row = num; row < arr.length - num; row++) {
//第一行 和倒数第一行
if (row - num == 0 || row + num == arr.length - 1) {
for (int cow = num; cow < arr.length - num; cow++) {
if ((cow - num < 2 || arr.length - num - 1 < cow + 2)) {
//防止在画i个边框时出现将前面边框给替换掉
if (num != 0) {
if (!(cow-num== 0||cow+num==arr.length-1))
arr[row][cow] = '.';
}
else if (num == 0)
arr[row][cow] = '.';
} else {
arr[row][cow] = '$';
}
}
}
//第二行和倒数第二行
else if (row - num == 1 || row + num == arr.length - 1 - 1) {
for (int cow = num; cow < arr.length - num; cow++) {
if (cow - num == 2 || arr.length - num - 1 == cow + 2) {
arr[row][cow] = '$';
} else {
arr[row][cow] = '.';
}
}
}
//第三行和 倒数第三行
else if (row - num == 2 || row + num == arr.length - 2 - 1) {
for (int cow = num; cow < arr.length - num; cow++) {
if (cow - num < 3 || cow + num > arr.length - 4) {
arr[row][cow] = '$';
} else {
arr[row][cow] = '.';
}
}
}
//其它
else {
for (int cow = num; cow < arr.length - num; cow++) {
if (cow - num == 0 || cow + num == arr.length - 1) {
arr[row][cow] = '$';
} else {
arr[row][cow] = '.';
}
}
}
}
}
//画十字架
public static void graphCentre(char[][] arr, int num) {
for (int row = num; row < arr.length - num; row++) {
if (row - num == 2) {
for (int cow = num; cow < arr.length - num; cow++)
arr[row][cow] = '$';
} else {
arr[row][arr.length / 2] = '$';
}
}
}
}