• 回型嵌套


    回型嵌套

    请画出下图:

    我们可以考虑递归的做法。

    当用户输入一个回型的边长时,我们通过程序输出一个相应边长的回型,当边长小于5时,输出的回型只有一层,当边长大于等于5时,输出的回型就是多层的。

    编程思路如下:

    先创建一个与回型边长等宽的二维数组,先画最外围的回型,它的起始位置为(0,0),长度为输入的边长,该回型是由两条横线,两条竖线组成,分别画出这四条线即可,而画横线与竖线很简单,只要把数组中的这些位置替换成*就可以了,最外围画完后就可以画中间位置的回型,仔细观察上述图形,会发现最外围的回型与和他相邻的回型的起始位置相差2,边长相差4,其他都一样,一次类推,起始位置每次加2,而边长每次减4,直到边长为零结束。

    程序如下:

    //2017.03.29 by 迷糊狐狸
    import java.util.Scanner;
    
    public class MyWork {
        
        //开一个与回型边长等宽的数组,也可以适当大一些
        static void h(int n){
            char[][] cc = new char[n][n];
            h(cc,0,0,n);
            show(cc);
        }
        
        //分别画出回型的四条边
        static void h(char[][] cc, int x, int y, int n){
            //递归结束条件
            if(n<=0)return;
            
            draw_x(cc,x,y,n);
            draw_x(cc,x,y+n-1,n);
            draw_y(cc,x,y,n);
            draw_y(cc,x+n-1,y,n);
            
            h(cc,x+2,y+2,n-4);
        }
        
        //画横线,注意x、y不要写反了
        //长宽相等的时候写反了不影响结果
        //当长宽不相等时会超出数组的范围
        static void draw_x(char[][] cc, int x, int y, int len){
            for(int i=0; i<len; i++)cc[y][x+i] = '*';
        }
        
        static void draw_y(char[][] cc, int x, int y, int len){
            for(int i=0; i<len; i++)cc[y+i][x] = '*';
        }
        
        //显示数组
        static void show(char[][] cc){
            for(int i=0; i<cc.length; i++){
                for(int j=0; j<cc[i].length; j++){
                    System.out.print(cc[i][j]==0? ' ' : cc[i][j]);
                }
                System.out.println();
            }
        }
    
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            System.out.print("请输入回形边长:");
            while(true){
                try{
                    int n = Integer.parseInt(scan.nextLine().trim());
                    if(n<=0)throw new Exception();
                    h(n);
                    break;
                }catch(Exception e){
                    System.out.println("输入有误!");
                    System.out.print("请重新输入:");
                }
            }
        }
    }

     运行结果如下:

    示例1:

    示例2:

    示例3:

    示例4:

  • 相关阅读:
    MAVLINK协议
    rtt之通用bootloader
    easy flash &easy log
    电源适配器DC插头规格
    Jquery实现仿腾讯微薄的广播发表
    可供前端工程师选择的精彩CSS框架
    javascript实现记录文本框内文字个数
    Jquery仿IGoogle实现可拖动窗口(源码)
    jquery javascript 回到顶部功能
    常用的经典jquery代码[转]
  • 原文地址:https://www.cnblogs.com/liyuanba/p/2017-03-29.html
Copyright © 2020-2023  润新知