您的位置:首页 > 其它

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

2017-03-30 22:06 211 查看
历届试题 打印十字图

时间限制:1.0s 内存限制:256.0MB

问题描述

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

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


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

输入格式

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

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

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


样例输入2

3

样例输出2

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


提示

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

import java.util.Scanner;

public class Main {
static int last=0;
public static void main(String []args)
{
Scanner cs = new Scanner(System.in);
int n=cs.nextInt();
char G[][]=new char [4*(n+1)+1][5+4*n];
for(int i=0;i<4*(n+1)+1;i++){
if(i==0){   //第一行的情况
for(int j=0;j<5+4*n;j++){
if(j==0 || j==1 || j==5+4*n-1 || j==5+4*n-2){
G[i][j]='.';
}else{
G[i][j]='$';
}
}
}
else if(i==1){  //第二行的情况
for(int j=0;j<5+4*n;j++){
if(j==2 || j==5+4*n-1-2){
G[i][j]='$';
}else{
G[i][j]='.';
}
}
}
else if(i<=2*n+3-1){
//第三行开始,每一行是上一行的反转(‘$变. , .变$’),新的位补$,后半部分直接镜像即可
for(int j=2*n+3-1;j>=1;j--){
if(G[i-1][j-1]=='.'){
G[i][j]='$';
}else{
G[i][j]='.';
}
}
G[i][0]='$';
for(int j=2*n+3;j<5+4*n;j++){
G[i][j]=G[i][5+4*n-j-1];
}
}
else{
//后半2*n+2行是前面行的镜像
for(int j=0;j<5+4*n;j++){
G[i][j]=G[5+4*n-i-1][j];
}
}
}
for(int i=0;i<4*n+5;i++){
for(int j=0;j<4*n+5;j++){
System.out.print(G[i][j]);
}
System.out.println();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: