本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
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
本题就是理解题意,本题的意思是从1开始向后每次加一,然后呢逆时针输出,每次输出一个字符,然后就像例子一样了
我的思路是先维护出一个字符串,先计算出一共需要多少字符,随后就去维护出一个这样长的字符串,除了第一行,每次就是头一个尾一个,这样交替输出,最后剩下的就是最后一行,继续输出即可
下面是代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer x = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
x.nextToken();
int n=(int)x.nval;
int m=2*(n-2)+2*n;
StringBuffer ss=new StringBuffer();
for(int i=1;ss.length()<=m;i++)
ss.append(i);
String s=ss.substring(0, m).toString();
for(int j=0;j<n-1;j++)
out.print(".");
out.println(1);
int l=n-2,e=1,beg=1,end=m-1;
for(int i=1;i<n-1;i++) {
for(int j=0;j<l;j++)
out.print(".");
out.print(s.charAt(beg++));
for(int j=0;j<e;j++)
out.print(".");
out.println(s.charAt(end--));
l--;
e+=2;
}
out.println(s.substring(beg, end+1));
out.flush();
}
}