蓝桥杯第九届javaC组等腰三角形


题目

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

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

显示不正确时,参看:p1.png

输入,一个正整数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


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。

答案

/**
 * 等腰三角形
 * 先用1,2,3,。。。。拼接一个足够长的串
 * 用这个串填充三角形的三条边,从上方顶点开始,逆时针填充
 */

/**
 * 计算总共需要多少个数字:
 *      第一行固定需要一个数字
 *      第二行到n-1行每行需要两个
 *      所以第一行到第n-1行需要1+(n-2)*2个数字
 *      最后一行由题目给定的数据可以数得需要2n-1个数(个人认为题目不严谨,只给定高的话应该有无数个解,但是这里还是这么做)
 *      所以总共需要4n-4个数字
 */

/**
 * 怎么打印:
 *      第一行先打印n-1个.
 *      第二到n-1行先打印n-i-1个点(比上一行少一个)打印第一个数字,打印i*2-1个点(比上一行多一个)再打印一个数字
 */
public class T9_等腰三角形 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        //计算等腰三角形总共需要多少数字
        int num = 4*n-4;
        System.out.println(num);

        //生成数字并存入字符串,再转化成字符数组方便使用
        String str = "";
        for (int i = 1; i <= num; i++) {
            str+=i;
        }
        char[] ch = str.toCharArray();
        System.out.println(ch.length);

        //打印第一行
        for (int i = 0; i < n - 1; i++) {
            System.out.print(".");
        }
        System.out.println(1);

        //打印第二到n-1行
        //遍历行
        for (int i = 1;i<n-1;i++){
            //打印每一行
            for (int j = 0;j<n-i-1;j++){
                System.out.print(".");
            }
            System.out.print(ch[i]);
            for (int j = 0;j<i*2-1;j++){
                System.out.print(".");
            }
            //从后面取
            System.out.println(ch[num-i]);
        }

        //打印最后一行
        //从n-1开始,一共需要2n-1个数
        //n-1+(2n-1)==> n-1+2n-1 ==>  3n-2
        for (int i = n-1;i<(3*n-2);i++){
            System.out.print(ch[i]);
        }






    }
}

文章作者: WJF
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WJF !
  目录