Problem Description
把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。
Input
每行包含一个字符和一个整数n(0<n<41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。
Output
每个样板三角形之间应空上一行,三角形的中间为空。显然行末没有多余的空格。
Sample Input
X 2
A 4
@
Sample Output
X
XXX
A
A A
A A
A A A A A A A
主要就是指定位置输出字符,先单独输出最后一行,再用每一行遍历到(2*line-1)/2+i,需要输入字符的人每一行位置左边是2n-1/2-i;右边2n-1/2+i;因此用绝对值包起来。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=1;
while(sc.hasNext()){
m++;
String x=sc.nextLine();
String a[]=x.split(" ");
char c=a[0].charAt(0);
if(c=='@'){
break;
}
int line=Integer.parseInt(a[1]);
if(m>2)
System.out.println("");//再每一个 新的第一行空一行
for(int i=0;i<line;i++)//循环每一行
{
if(i==line-1)//i等于最后一行
{
for(int j=0;j<2*line-1;j++)//输入2*line-1个符号
{System.out.print(c);}
}
else {
for(int j=0;j<=(2*line-1)/2+i;j++)
//否则第i行要打印j个字符,当i等于[j-(2*line-1)-1]时
//即打印的行数与其所在的要打印的字符位置公式相等
if(i==Math.abs(j-(2*line-1)/2))
{
System.out.print(c);
}
else
System.out.print(" ");
}
System.out.println();
}
}
}
代码截图:
运行截图:
此题需要明白的一点时,该在什么位置输出什么就能解决✔