历届试题 打印十字图
第一次写博客,看了各位大佬的代码之后写的。
1. 题目简介
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
将图案截图后不断变形得到上图
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
2.题目分析
1.定义二维数组储存图案;//长度为4*n+5
2. 图片为中心对称图案,我选择先赋值左上角四分之一图案
3.左上角图案又可分为A、B、C三部分赋值;
4. 分别赋值A、B、C红色部分为’$’;
5. 左上角赋值完成后赋值右上角和下半部分;
6. 输出二维数组;
3.代码
~~//水平比较菜,代码也比较菜~~
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int L=4*n+5;
int mid=L/2;
char arr[][]=new char[L+1][L+1];
for(int i=1;i<=L;i++){
for(int j=1;j<=L;j++){
arr[i][j]='.';//全部初始化为'.'
}
}
for(int i=1;i<=mid+1;i++){
for(int j=1;j<=mid+1;j++){
if((i>=3)&&(j<i-1)&&(j%2!=0)){
arr[i][j]='$';//赋值A部分
}
else if((i==j)&&(i>=3)&&(i%2!=0)){
arr[i][j]=arr[i-1][j]=arr[i][j-1]='$';//赋值B部分
}
else if((j>=3)&&(i<j-1)&&(i%2!=0)){
arr[i][j]='$';//赋值C部分
}
}
}
//赋值右上角
for(int i=1;i<=mid+1;i++){
for(int j=mid+2;j<=L;j++){
arr[i][j]=arr[i][L+1-j];
}
}
//赋值下半部分
for(int i=mid+2;i<=L;i++){
for(int j=1;j<=L;j++){
arr[i][j]=arr[L+1-i][j];
}
}
for(int i=1;i<=L;i++){
for(int j=1;j<=L;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}