ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

蓝桥杯2018年第九届真题——等腰三角形

2021-11-06 20:03:13  阅读:214  来源: 互联网

标签:题目 数字 填充 int 打印 等腰三角 蓝桥 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有