您的位置:首页 > 编程语言 > Java开发

蓝桥杯 历届考题 打印十字图 java编写

2017-02-27 22:40 134 查看
问题描述

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

..$$$$$$$$$$$$$..

..$...........$..

$$$.$$$$$$$$$.$$$

$...$.......$...$

$.$$$.$$$$$.$$$.$

$.$...$...$...$.$

$.$.$$$.$.$$$.$.$

$.$.$...$...$.$.$

$.$.$.$$$$$.$.$.$

$.$.$...$...$.$.$

$.$.$$$.$.$$$.$.$

$.$...$...$...$.$

$.$$$.$$$$$.$$$.$

$...$.......$...$

$$$.$$$$$$$$$.$$$

..$...........$..

..$$$$$$$$$$$$$..

对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

输入格式

一个正整数 n (n<30) 表示要求打印图形的层数。

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

..$$$$$..

..$...$..

$$$.$.$$$

$...$...$

$.$$$$$.$

$...$...$

$$$.$.$$$

..$...$..

..$$$$$..

样例输入2

3

样例输出2

..$$$$$$$$$$$$$..

..$...........$..

$$$.$$$$$$$$$.$$$

$...$.......$...$

$.$$$.$$$$$.$$$.$

$.$...$...$...$.$

$.$.$$$.$.$$$.$.$

$.$.$...$...$.$.$

$.$.$.$$$$$.$.$.$

$.$.$...$...$.$.$

$.$.$$$.$.$$$.$.$

$.$...$...$...$.$

$.$$$.$$$$$.$$$.$

$...$.......$...$

$$$.$$$$$$$$$.$$$

..$...........$..

..$$$$$$$$$$$$$..

提示

请仔细观察样例,尤其要注意句点的数量和输出位置。

解题思路:把整张图,看成一个m行m列的二维数组,首先将二维数组所有赋值为‘.’,然后经过观察,发现每个“十”都是由‘$’组成一圈一圈的,所以运用循环,每次循环输出一个“十”字圈,占用以前的‘.’,最后再输出整个二维数组。

以下是代码:

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = 4 * n + 5;
char[][] ch = new char[m][m];
// 将所有赋值为‘.’
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
ch[i][j] = '.';
}
}
// 定义最中间的‘十’字
ch[(m - 1) / 2][(m - 1) / 2] = '$';
ch[(m - 1) / 2][(m - 1) / 2 - 1] = '$';
ch[(m - 1) / 2][(m - 1) / 2 - 2] = '$';
ch[(m - 1) / 2][(m - 1) / 2 + 1] = '$';
ch[(m - 1) / 2][(m - 1) / 2 + 2] = '$';
ch[(m - 1) / 2 - 1][(m - 1) / 2] = '$';
ch[(m - 1) / 2 - 2][(m - 1) / 2] = '$';
ch[(m - 1) / 2 + 1][(m - 1) / 2] = '$';
ch[(m - 1) / 2 + 2][(m - 1) / 2] = '$';
// 循环输出周围几圈的‘十’字
int k = 0;
for (int j = 1; j <= n;) {
for (int i = 0; i <= n * 2; i++) {
ch[(m - 1) / 2 - i][k] = '$';
ch[k][(m - 1) / 2 - i] = '$';
ch[(m - 1) / 2 + i][k] = '$';
ch[k][(m - 1) / 2 + i] = '$';
ch[(m - 1) / 2 - i][m - 1 - k] = '$';
ch[(m - 1) / 2 + i][m - 1 - k] = '$';
ch[m - 1 - k][(m - 1) / 2 - i] = '$';
ch[m - 1 - k][(m - 1) / 2 + i] = '$';
if (i == n * 2) {
ch[(m - 1) / 2 - i][k + 1] = '$';
ch[(m - 1) / 2 - i][k + 2] = '$';
ch[k + 1][(m - 1) / 2 - i] = '$';
ch[(m - 1) / 2 - i][m - k - 2] = '$';
ch[(m - 1) / 2 - i][m - k - 3] = '$';
ch[k + 1][m / 2 + i] = '$';
ch[m / 2 + i][k + 1] = '$';
ch[m - k - 3][(m - 1) / 2 - i] = '$';
ch[m - k - 2][(m - 1) / 2 - i] = '$';
ch[m / 2 + i][m - k - 2] = '$';
ch[m / 2 + i][m - k - 3] = '$';
ch[m - k - 2][m / 2 + i] = '$';
}
}
n--;
k = k + 2;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
System.out.print(ch[i][j]);
}
System.out.println();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息