历届试题 打印十字图

问题描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:


对方同时也需要在电脑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] = '$';
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值