Prev2 历届试题 打印十字图
题目如下:
这个题目太长了,直接看输入输出吧,其实就是找规律打印图像,虽然这种题目看起来挺简单的,但找不到规律还是有些头疼的。这个图像的规律就是他是一个中心对称图形,我们只需要完成一部分的打印,就可以通过对称性来快速完成
我这里选择以左上角为主来打印,这样看是不是好打多了,其实就是几条线,只是会拐弯,这个规律很好找的
..$$$$$$$........
..$..............
$$$.$$$$$........
$...$............
$.$$$.$$$........
$.$...$..........
$.$.$$$.$........
$.$.$...$........
$.$.$.$$$........
.................
.................
.................
.................
.................
.................
.................
.................
然后通过左右对称,把右边打印出来
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
.................
.................
.................
.................
.................
.................
.................
.................
最后上下对称,整个就打印出来了
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
代码如下,因为上面已经演示了过程,代码的注释就不写了,其实就是把上面的过程转换成代码
package prev;
import java.util.Arrays;
import java.util.Scanner;
/**
* @Description: 历届试题 打印十字图
* @ClassName: Prev2
* @author: fan.yang
* @date: 2020/09/03 09:37
*/
public class Prev2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int x = n * 4 + 5;//行列的长度 十字图其实是个n * n的数组
char[][] map = new char[x][x];
//先把地图铺满. 然后需要改成$时在这基础上改就行
for(int i = 0;i < x;i++)
Arrays.fill(map[i], '.');
//打印左上角的过程
for(int i = 0;i < x / 2;i++){
if(i % 2 == 1){
continue;
}
int j = x / 2;
for(;j >= 2 + i;j--)
map[i][j] = '$';
int k = i;
map[++k][++j] = '$';
map[++k][j] = '$';
map[k][--j] = '$';
map[k][--j] = '$';
for(;k < x / 2 + 1;k++)
map[k][j] = '$';
}
//打印右边的过程
for(int i = 0;i < x / 2 + 1;i++){
for(int j = 0;j < x / 2;j++){
map[i][x - 1 - j] = map[i][j];
}
}
//打印下部分的过程 其实就是引用改一下
for(int i = 0;i < x / 2;i++){
map[x - 1 - i] = map[i];
}
for(int i = 0;i < x;i++){
for(int j = 0;j < x;j++){
System.out.print(map[i][j]);
}
System.out.println();
}
}
}