LQ0122 等腰三角形打印图形

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0122 等腰三角形打印图形相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2018初赛 C++ C组F题

题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:

  1. 先用1,2,3,…的自然数拼一个足够长的串
  2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
    比如,当三角形高度是8时:

输入格式
输入存在多组数据,对于每组数据:
输入一行包含一个正整数n(3<n<300),表示三角形的高度

输出格式
对于每组测试数据输出用数字填充的等腰三角形。
为了便于测评,我们要求空格一律用"."代替。

输入样例
5
10
输出样例

....1
...2.1
..3...2
.4.....1
567891011
.........1
........2.2
.......3...2
......4.....2
.....5.......1
....6.........2
...7...........0
..8.............2
.9...............9
1011121314151617181

问题分析
这个题是打印图形问题,关键在于n与各种数量的数学关系。找到公式关系尤为重要。
需要多少数字?
第1行1个数字,第2行到第n-1行每行需要2个数字,第n行需要2n-1个数字。合计需要1+2(n-2)+2n-1=4n-4个数字。
第1行内容:n-1".“(点);1;换行('\\n)。
第2行至第n-1行内容:若干个”.“(点);一个数字;若干个”."(点);一个数字;换行。
第n行内容:2n-1个数字。

AC的C++语言程序如下:

/* LQ0122 等腰三角形 */

#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

string t;

void init()

    for (int i = 1; i <= 500; i++) 
        string s;
        int n = i;
        while (n)
            s += (char)('0' + n % 10), n /= 10;
        reverse(s.begin(), s.end());
        t += s;
    


int main()

    init();

    int n;
    while (cin >> n) 
        // 第1行至第n-1行
        for (int i = 1; i < n; i++) 
            for (int j = 1; j <= n - i; j++)
                putchar('.');
            putchar(t[i - 1]);
            if (i != 1) 
                for (int j = 1; j < (i - 1) * 2; j++)
                    putchar('.');
                putchar(t[4 * n - 4 + 1 - i]);
            
            putchar('\\n');
        
        // 第n行
        for (int i = 0; i < 2 * n - 1; i++)
            putchar(t[n - 1 + i]);
        putchar('\\n');
    

    return 0;

以上是关于LQ0122 等腰三角形打印图形的主要内容,如果未能解决你的问题,请参考以下文章

LQ0196 打印图形程序填空

LQ0183 打印图形程序填空

二重循环之打印图形例解

C语言实验——打印数字图形

求用C语言打印出1 123 12345 1234567 123456789这样的等腰三角形的程序是啥

LQ0160 三角形面积计算几何