蓝桥杯—等腰三角形—逐步推导

1、问题描述

本题目要求你在控制台输出一个由数字组成的等腰三角形。
  具体的步骤是:
  1. 先用1,2,3,...的自然数拼一个足够长的串
  2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
  比如,当三角形高度是8时:

  1
  2 1
  3 8
  4 1
  5 7
  6 1
  7 6
  891011121314151

  显示不正确时,参看:



  输入,一个正整数n(3<n<300),表示三角形的高度
  输出,用数字填充的等腰三角形。

  为了便于测评,我们要求空格一律用"."代替。

  例如:

输入格式

  5

  程序应该输出:
  ....1
  ...2.1
  ..3...2
  .4.....1
  567891011

  再例如:

输入格式

  10

  程序应该输出:
  .........1
  ........2.2
  .......3...2
  ......4.....2
  .....5.......1
  ....6.........2
  ...7...........0
  ..8.............2
  .9...............9
  1011121314151617181

  再例如:

输入格式

  15

  程序应该输出:

  ..............1
  .............2.3
  ............3...2
  ...........4.....3
  ..........5.......1
  .........6.........3
  ........7...........0
  .......8.............3
  ......9...............9
  .....1.................2
  ....0...................8
  ...1.....................2
  ..1.......................7
  .1.........................2
  21314151617181920212223242526

2、代码实现

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		//三角形的行数
		int row = scanner.nextInt();
		//记录打印的数字
		int count = 1;
		//拼接未用完的数字
		StringBuffer sb = new StringBuffer();
		sb.append(count);
		
		//打印就得用char数组,用别的咳嗽
		char[][] map = new char[row][2 * row - 1];
		//填充
		for(int i = 0;i < map.length;i++) {
			for(int j = 0;j < map[i].length;j++) {
				map[i][j] = '.';
			}
		}
		
		//左边的线
		for(int i = 0;i < row - 1;i++) {
			map[i][map[i].length / 2 - i] = sb.charAt(0);
			sb = new StringBuffer(sb.substring(1));
			count++;
			sb.append(count);
		}
		
		//最后一条线
		for(int j = 0;j < map[0].length;j++) {
			map[row - 1][j] = sb.charAt(0);
			sb = new StringBuffer(sb.substring(1));
			count++;
			sb.append(count);
		}
		
		//右边的线
		for(int i = row - 2;i > 0;i--) {
			map[i][map[i].length / 2 + i] = sb.charAt(0);
			sb = new StringBuffer(sb.substring(1));
			count++;
			sb.append(count);
		}
		
		//打印
		for(int i = 0;i < map.length;i++) {
			for(int j = 0;j <= map[i].length / 2 + i;j++) {
				System.out.print(map[i][j]);
			}
			System.out.println();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小红花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值