蓝桥杯2018年第九届真题——等腰三角形
作者:互联网
等腰三角形
一、题目内容
题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。具体的步骤是:
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
二、思路分析
又是一道打印图形的题目,主要思路题目描述的1,2已经告诉了,先拼接一个字符串,然后逆时针填充为等腰三角形。
拼接一个字符串可以通过循环和C++11标准中的库函数 to_string(numberic_value) 来实现,这个函数还是使用起来非常方便,先打印第1行,然后打印第2到第n-1行,最后打印最后一行,具体实现方法见下面代码实现部分的详细注释。要注意打印'.'或数字的条件,可以多尝试分析,最终确定准确的结果。
三、代码实现
#include <bits/stdc++.h>
using namespace std;
string str = ""; //初始化一个空字符串
int n;
int main() {
cin >> n;
int lr = 2 * n - 3; //左右两侧数字个数
int bot = 2 * n - 1; //底部数字个数
int num = lr + bot; //整个图形数字个数
//将一段足够长的数字转换为字符串保存在str中
for (int i = 1; i < num; i++) { //i<() 最终字符串长度只要大于num数就可以,不一定非要i<num
str += to_string(i);
}
//打印第一行
for (int i = 1; i <= n - 1; i++) {
cout << ".";
}
cout << 1 << endl;
int r_number = num - 1; //初始化右侧数字在str中的位置
int l_point = n - 2; //初始化左面点的循环终止条件
int mid_point = 1; //初始化中间点的循环终止条件
//打印第2行到n-1行
for (int i = 2; i <= n - 1; i++) {
//打印左侧点和左侧数字
for (int j = 1; j <= l_point; j++) {
cout << ".";
}
cout << str[i - 1] ;
//打印中间点和右侧数字
for (int j = 1; j <= mid_point; j++) {
cout << ".";
}
cout << str[r_number] << endl;
r_number--; //位置向前移动一个
mid_point += 2; //每下一行增加两个
l_point--; //下一行减少一个
}
//打印最后一行
for (int i = n - 1 ; i <= n - 1 + 2 * n - 2; i++) {
cout << str[i] ;
}
return 0;
}
加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。
标签:题目,数字,填充,int,打印,等腰三角,蓝桥,2018 来源: https://blog.csdn.net/Hello_world_n/article/details/121167395