LQ0122 等腰三角形打印图形
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0122 等腰三角形打印图形相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2018初赛 C++ C组F题
题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
- 先用1,2,3,…的自然数拼一个足够长的串
- 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是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 等腰三角形打印图形的主要内容,如果未能解决你的问题,请参考以下文章