打印菱形杨辉三角数字图形

中午时候,群里突然有群友发了个面试的上机测试题,看着挺有意思的,其实就是个杨辉三角的变异类型。

下午上班后,开始着手写这个题,连百度带自己测,耗费了两个半小时,也是怪丢人的。

话不多说,先看题,题目很简单,就是输入一个数字,打印出对应的类型:

9:

15:

相信懂的人都能看出来规律了,我刚开始找错方向了,想了有一会儿,后来把效果图拆为两个直角三角形之后就明了了,就是两个杨辉三角合并在一起。

代码如下,未优化:

public static void main(String[] args) {
        //输入的数字,只能为奇数
        int rows = 15;
        //需要显示的行数
        int hang = (rows + 1)/2;
        //反向+正向
        for(int i =rows;i>=1;i--) {
            if(i % 2 ==0){
                continue;
            }
            //左半边输出数字
            int number = i;
            int tmp = (i+1)/2;
            number = tmp *(new Double(Math.pow(2, tmp-1)).intValue());
            //打印空格
            for(int x=0;x<hang-tmp;x++) {
                System.out.print("     ");
            }
            for(int j=tmp;j>0;j--) {
                System.out.format("%5d",number);
                number = (number +new Double(Math.pow(2, j-1)).intValue())/2 ;
            }
            //右半边输出数字
            int number2 = rows -i + 1;
            for(int j=0;j<(rows -i + 2)/2;j++) {
                System.out.format("%5d",number2);
                number2 = 2 * (number2 -new Double(Math.pow(2, j)).intValue()) ;
            }
            System.out.println();
        }
    }

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值