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

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

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

输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。

暴力递推 看规律和边界限制:

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		Paint(n);
	}
	public static void Paint(int n) {
		String [][]nums2=new String[9+4*(n-1)][9+4*(n-1)];
		
		for(int x=0;x<n;x++) {
			String [][]nums1=new String[9+4*x][9+4*x];
			if(x!=0)
				for(int i=0;i<nums1.length-2;i++)
					for(int j=0;j<nums1.length-2;j++)
						nums1[i+2][j+2]=nums2[i][j];
			if(x==0) {
				for(int y=0;y<9;y++) {
					for(int z=0;z<9;z++) {
						if(y==0&&z>1&&z<nums1.length-2)
							nums1[y][z]="$";
						else if(y==1&&(z==2||z==nums1.length-3))
							nums1[y][z]="$";
						else if(y==2&&z!=3&&z!=nums1.length-4)
							nums1[y][z]="$";
						else if(y==3&&(z==0||z==4||z==nums1.length-1))
							nums1[y][z]="$";
						else if(y==4&&(z==0||z>1&&z<nums1.length-2||z==nums1.length-1))
							nums1[y][z]="$";
						else if(y<5)
							nums1[y][z]=".";
						else
							nums1[y][z]=nums1[nums1.length-1-y][z];
					}
				}
			}else {
			
				for(int y=0;y<9+4*x;y++) {
					for(int z=0;z<9+4*x;z++) {
						if(y==0&&z>1&&z<nums1.length-2)
							nums1[y][z]="$";
						else if(y==1&&(z==2||z==nums1.length-3))
							nums1[y][z]="$";
						else if(y==2&&z!=3&&z!=nums1.length-4)
							nums1[y][z]="$";
						else if(y>2&&y<(9+4*x+1)/2&&(z==0||z==nums1.length-1))
							nums1[y][z]="$";
						else if(y==3&&(z>0&&z<4||z<nums1.length-1&&z>nums1.length-5))
							nums1[y][z]=".";
						else if(y<3&&y>=0)
							nums1[y][z]=".";
						else if(y<(9+4*x+1)/2&&y>3&&(z==1||z==nums1.length-2))
							nums1[y][z]=".";
						else
							nums1[y][z]=nums1[nums1.length-1-y][z];
					}
				}
				
			}
			for(int i=0;i<nums1.length;i++)
				for(int j=0;j<nums1.length;j++)
					nums2[i][j]=nums1[i][j];
		}
			for(int x=0;x<nums2.length;x++) {
				for(int y=0;y<nums2.length;y++) {
					System.out.print(nums2[x][y]);
				}
				System.out.println();
			}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值