算法笔记_198:历届试题 打印十字图(Java)

目录

1 问题描述

2 解决方案

 


1 问题描述

问题描述

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

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

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

输入格式

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

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

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

样例输入2

3

样例输出2

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

提示

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


2 解决方案

具体代码如下:

import java.util.Scanner;

public class Main {

    public void getResult(int n) {
        int len = 5 + 4 * n;
        int mid = len / 2;
        char[][] result = new char[len][len];
        for(int i = 0;i < len;i++)
            for(int j = 0;j < len;j++)
                result[i][j] = ‘.‘;
        for(int i = mid - 2;i <= mid + 2;i++) {
            result[mid][i] = ‘$‘;
            result[i][mid] = ‘$‘;
        }
        for(int i = 1;i <= n;i++) {
            for(int j = mid - 2 * i;j <= mid + 2 * i;j++) {
                result[mid - 2 * (i + 1)][j] = ‘$‘;
                result[mid + 2 * (i + 1)][j] = ‘$‘;
                result[j][mid - 2 * (i + 1)] = ‘$‘;
                result[j][mid + 2 * (i + 1)] = ‘$‘;
            }
            //左上角
            result[mid - 2 * i][mid - 2 * i] = ‘$‘;
            result[mid - 2 * i][mid - 2 * i - 1] = ‘$‘;
            result[mid - 2 * i - 1][mid - 2 * i] = ‘$‘;
            //右上角
            result[mid - 2 * i][mid + 2 * i] = ‘$‘;
            result[mid - 2 * i - 1][mid + 2 * i] = ‘$‘;
            result[mid - 2 * i][mid + 2 * i + 1] = ‘$‘;
            //左下角
            result[mid + 2 * i][mid - 2 * i] = ‘$‘;
            result[mid + 2 * i][mid - 2 * i - 1] = ‘$‘;
            result[mid + 2 * i + 1][mid - 2 * i] = ‘$‘;
            //右下角
            result[mid + 2 * i][mid + 2 * i] = ‘$‘;
            result[mid + 2 * i][mid + 2 * i + 1] = ‘$‘;
            result[mid + 2 * i + 1][mid + 2 * i] = ‘$‘;
        }
        for(int i = 0;i < len;i++) {
            for(int j = 0;j < len;j++) {
                System.out.print(result[i][j]);
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        Main test = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        test.getResult(n);
    }
}
时间: 2024-12-24 18:55:02

算法笔记_198:历届试题 打印十字图(Java)的相关文章

【蓝桥杯】历届试题 打印十字图

历届试题 打印十字图   时间限制:1.0s   内存限制:256.0MB 问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: ..$$$$$$$$$$$$$....$...........$..$$$.$$$$$$$$$.$$$$...$.......$...$$.$$$.$$$$$.$$$.$$.$...$...$...$.$$.$.$$$.$.$$$.$.$$.$.$...$...$.$.$$.$.$.$$$$$.$.$.$$.$.$...$...$.$.$$.$.

蓝桥杯 历届试题 打印十字图

历届试题 打印十字图 时间限制:1.0s   内存限制:256.0MB 问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: ..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.

算法笔记_176:历届试题 最大子阵(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大. 其中,A的子矩阵指在A中行和列均连续的一块. 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数. 接下来n行,每行m个整数,表示矩阵A. 输出格式 输出一行,包含一个整数,表示A中最大的子矩阵中的元素和. 样例输入 3 3-1 -4 33 4 -1-5 -2 8 样例输出 10 样例说明 取最后一列,和为10. 数据规模和约定 对于50

算法笔记_182:历届试题 核桃的数量(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃(当然是不能打碎的) 3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛) 输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30) 输出格式 输出一个正整数,表示每袋核桃的数量. 样例输入1 2 4 5

算法笔记_181:历届试题 回文数字(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入的整数. 输入格式 一个正整数 n (10<n<100), 表示要求满足的数位和. 输出格式 若干行,每行包含一个满足要求的5位或6位整数. 数字按从小到大的顺序排列. 如果没有满足条件的,输出:-1 样例输入 44 样例输

算法笔记168:历届试题 矩阵翻硬币(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转. 其中i和j为任意使操作可行的正整数,行号和列号都是从1开始. 当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹--所有硬币均为正面朝上. 小明想知道最开始有多少枚硬币是反面朝上的.于是,他向他的好朋友小M寻求帮助. 聪明的小M告诉小明,

算法笔记_185:历届试题 格子刷油漆(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b c e f 就是合格的刷漆顺序. c e f d a b 是另一种合适的方案. 当已知 N 时,求总的方案数.当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模.

算法笔记_191:历届试题 大臣的旅费(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达.同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的. J是T国重要大臣,他巡查于各大城市之间,体察民情.所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情.他有一个钱袋,用于存放往来城市间的路费

算法笔记_189:历届试题 横向打印二叉树(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树时,则把该节点放入那个位置. 比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白. ...|-1210-|...|-8-|.......|...|-7.......|-5-|...........|-4 本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横