蓝桥杯-完美的代价

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

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

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

输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
 
//心得:打印图形的题目,题目给的太抽象,看到一篇博客上讲其转换为格点填充图,找起图像的规律会更简单。先将不能用于循环但不变的地方单独拿出进行初始化然后再注意循环结束的条件即可(循环结束条件非常重要)!
//不过目前我做题还是有些慢,找规律找的太死板,看到别人的代码反而很简单,还是要好好学习数学啊!!!

图片转自http://blog.csdn.net/u013451048/article/details/43865259

java代码:

 

import java.util.Scanner;

public class Main {
//1 :(5+4) 3:(5+4*3)

    public static void main(String[] args) {
    Scanner    sc= new Scanner(System.in);
    int n=sc.nextInt();//层数为n,行数为5+4*n
    int row=5+4*n;
    char[][] shizi = new char[row][row];
    //初始化
    init(shizi,row);
    
    //画十字
    f(shizi,row);
    
    //输出
    print(shizi);
    System.exit(0);
    }
    
    public static void init(char[][] shizi, int row){
        for(int i=0; i<row; i++)
            for(int j=0; j<row; j++)
                shizi[i][j]='.';
        
        int length=row/2;
        shizi[length][length-2]='$';
        shizi[length][length-1]='$';
        shizi[length][length]='$';
        shizi[length][length+1]='$';
        shizi[length][length+2]='$';
        shizi[length-2][length]='$';
        shizi[length-1][length]='$';
        shizi[length][length]='$';
        shizi[length+1][length]='$';
        shizi[length+2][length]='$';
    }
    
    public static void f(char[][] shizi, int row){
        for(int i=0; i<row/2-2; i+=2){
            for(int heng1=i+2; heng1<row-i-2; heng1++)
                shizi[i][heng1]='$';
            for(int hang1=i+1; hang1<=i+2; hang1++)
                shizi[hang1][row-i-3]='$';
            for(int lie1=row-i-2; lie1<row-i; lie1++)
                shizi[i+2][lie1]='$';
            for(int shu1=i+2; shu1<row-i-2; shu1++)
                shizi[shu1][row-i-1]='$';
            for(int lie2=row-i-2; lie2>row-i-4; lie2--)
                shizi[row-i-3][lie2]='$';
            for(int hang2=row-i-2; hang2<row-i; hang2++)
                shizi[hang2][row-i-3]='$';
            for(int heng2=row-i-4; heng2>=i+2; heng2--)
                shizi[row-i-1][heng2]='$';
            for(int hang3=row-i-2; hang3>row-i-4; hang3--)
                shizi[hang3][i+2]='$';
            for(int lie3=i+1; lie3>i-1; lie3--)
                shizi[row-i-3][lie3]='$';
            for(int shu2=row-i-4; shu2>=i+2; shu2--)
                shizi[shu2][i]='$';
            for(int lie4=i+1; lie4<i+3; lie4++)
                shizi[i+2][lie4]='$';
            for(int hang4=i+1; hang4>i-1; hang4--)
                shizi[hang4][i+2]='$';            
        }
    }
    
    
    public static void print(char[][] shizi){
       for(int i=0; i<shizi.length; i++)
            {for(int j=0; j<shizi[0].length; j++)
                {System.out.print(shizi[i][j]);}
        System.out.println();
        
            }
    }
}
posted @ 2017-03-09 21:13  adcandy  阅读(624)  评论(0编辑  收藏  举报