牛客网每日一题:打印菱形

题目描述:

java KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。

输入描述:

java 多组输入,一个整数(2~20)。

输出描述:

java 针对每行输入,输出用“”组成的菱形,每个“”后面有一个空格。

示例1

输入
2 
输出 
  * 
 * * 
* * * 
 * * 
  *

示例2

输入
3
输出
   * 
  * * 
 * * * 
* * * * 
 * * * 
  * * 
   * 

链接
https://www.nowcoder.com/practice/8b935f8ffe99445dbd42494febd13e45?tpId=107&&tqId=33344&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking

分析

观察示例1可将菱形看成三部分打印
上半部分
中间
下半部分

上部分一共打印n行(当n=2)
空格  字符
2     1    i=0
1     2    i=1
n-1   i+1

中间打印n+1个字符

下部分一共打印n行
空格  字符
1     2     i=0
2     1     i=1
i+1   n-1

代码思路

//打印上部分
for(){
  打印空格n-1
  打印字符i+1
  打印回车
}
//打印中间部分
for(){
  打印字符n+1
}
//打印下半部分
for(){
  打印空格i+1
  打印字符n-1
  打印回车
}

代码

import java.lang.*;
import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = null;
        StringBuilder sr = new StringBuilder();
        
        while((s = br.readLine())!=null){
            int n = Integer.parseInt(s);
            
            //打印上半部分
            for(int i = 0;i<n ;i++){
                for(int j = 0;j<n-i;j++){//打印空格
                    sr.append(" ");
                }
                for(int j = 0;j<i+1 ;j++){//打印图案
                    sr.append("* ");
                }
                sr.append("\n");//回车
            }
            
            //打印中间
            for(int j = 0;j<n+1 ;j++){
                sr.append("* ");
            }
            sr.append("\n");//回车

            //打印下半部分
            for(int i = 0;i<n ;i++){
                for(int j = 0;j<i+1;j++){//打印空格
                    sr.append(" ");
                }
                for(int j = 0;j<n-i;j++){//打印图案
                    sr.append("* ");
                }
                sr.append("\n");//回车
            }
            
            System.out.print(sr);
            sr.setLength(0);
        }
    }
}

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值