java 打印十字图

打印十字图
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)

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

 为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。


输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数
输出:
对应包围层数的该标志。


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

可以看出这是一个正方形 四个角凹回去的,所以这就简单了,上下对称 只要把每个圈的第一二三层输完 其余即可一次全输出

import java.util.Scanner;
public class 打印十字图 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
		String d[][]=new String[5+4*n][5+4*n];//是个正方形,可以得出 每多一层是在外面多了4个格子
		for(int o=0;o<n;o++){//总共有n层,由外往内层画十字
			for(int i=2*o;i<5+4*n-2*o;i++){//5+4*n为最外层正方形的边长,o为当前正在打印的层数 每打印一层右边少2格
				if(i==2*o||i==5+4*n-2*o-1){//第1层和最后1层是对称的
					for(int j=2*o;j<5+4*n-2*o;j++){
						if(j>1+2*o&&j<5+4*n-2*o-2)
							d[i][j]="$";
						else d[i][j]=".";							
					}
				}
				else if(i==1+2*o||i==5+4*n-2*o-2){
					 for(int j=2*o;j<5+4*n-2*o;j++){
						 if(j==2+2*o||j==5+4*n-2*o-3)
							 d[i][j]="$";
						 else d[i][j]=".";
					 }					
				}
				else if(i==2+2*o||i==5+4*n-2*o-3){
					for(int j=2*o;j<5+4*n-2*o;j++){
						if(j<3+2*o||j>5+4*n-2*o-4)
							d[i][j]="$";
						else d[i][j]=".";
					}
				}
				else{
					for(int j=2*o;j<5+4*n-2*o;j++){
						if(j==2*o||j==5+4*n-2*o-1)
							d[i][j]="$";
						else d[i][j]=".";
					}
				}
			}			
		}		
		for(int i=(5+4*n)/2-2;i<(5+4*n)/2+3;i++){//打印中间十字
			for(int j=(5+4*n)/2-2;j<(5+4*n)/2+3;j++){
				if(i==(5+4*n)/2)
					d[i][j]="$";
				else if(j==(5+4*n)/2)
					d[i][j]="$";
				else d[i][j]=".";
					
		    }
		}
		for(int o=0;o<n;o++){//因为是按照正方形来打印的 所以四个角的‘$’在每次打印内层后会被覆盖为‘.’,所以最后再将其变会‘$’。
            for(int j=2+2*o;j<5+4*n-2*o-2;j=5+4*n-2*o-3){//若此段代码不理解 可将此段代码删去后 看一下区别即可
	            d[j][2+2*o]=d[j][5+4*n-2*o-3]="$";
	            if(j==5+4*n-2*o-3)
	            	break;
            }
		}
		for(int i=0;i<5+4*n;i++){
			for(int j=0;j<5+4*n;j++)
				System.out.print(d[i][j]);
			System.out.println();
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值