蓝桥杯第九届省赛Java C组真题 第八题,打印等腰三角形
package Z4_8;
import java.util.Arrays;
import java.util.Scanner;
/*
* 打印等边三角形
* 1. 先用1,2,3,...的自然数拼一个足够长的串
* 2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
* 比如,当三角形高度是5时:
* ....1
* ...2.1
* ..3...2
* .4.....1
* 567891011
* 所需字符4n-4
* 观察可以看出底边数字个数为2n-1
*
* 思路整理:
* 先找规律,找出要打印的字符数量,将字符存进字符数组,到时候直接取出来就好了
* 先打印出一个梯形,再在合适的位置替换成字符
* 左下的数字打印的位置可以理解为是递减的,找规律可以发现是n-i,
* 从字符数组中取出的字符按照i的值作为下标来取就可以了,因为一行一个嘛,
* 右下则理解为递增,当打印改行的最后一个时进行填字符,
* 即当j为最末尾时进行填但是第一行填的是字符数组中的第一个,
* 所以要稍微注意点,设置个条件i!=0就好了,因为i=0代表第一行
* *底边注意规律是-n*,不要问我为什么找到的,因为我比较聪明
*/
public class printSanjiao {
public static void main(String[] args) {
// 获取输入,截取需要的字符数量
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
char[] ch = new char[4*n-4];
String temp = "";
int count = 0;
StringBuilder sb = new StringBuilder();
for (int i = 1; i < 4*n-4; i++) {
temp += Integer.toString(i);
}
temp = temp.substring(0,4*n-4);
char []chartemp = temp.toCharArray();
for (int i = 0; i < n; i++) {
for (int j = n+i; j > 0; j--) {
// 打印左下数字
if (j==2*i+1) {
System.out.print(chartemp[i]);
// 打印右下数字
}else if (j==1&&i!=0) {
System.out.print(chartemp[4*n-4-i]);
// 打印最下方数字
}else if(i==n-1) {
count++ ;
System.out.print(chartemp[j+2*count-n]);
}else {
System.out.print(".");
}
}
System.out.println();
}
}
}