题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
-
先用 1,2,3... 的自然数拼一个足够长的串
-
用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是 8 时,如下图:
输入描述
输入一个正整数 n(3<n<300) n(3<n<300),表示三角形的高度。
输出描述
输出对应的三角形。
输入输出样例
示例
输入
5
输出
....1
...2.1
..3...2
.4.....1
567891011
代码:
#include <bits/stdc++.h> // 包含标准的C++头文件,这个头文件包含了所有的标准库文件
using namespace std;
string s = " "; // 定义字符串s,初始化为空格字符,后续会追加数字字符串
int n, mapp[305][605], num = 1; // 定义整数n(输入),二维数组mapp,和整数num(用于从字符串s中取字符)
int main() {
// 构建字符串s,将数字1到999依次拼接到字符串s中
for (int i = 1; i < 1000; i++) {
s += to_string(i);
}
// 初始化二维数组mapp的所有元素为-1
memset(mapp, -1, sizeof mapp);
// 读取输入的n(注意:此处假设n已经在输入中给出)
cin >> n;
// 构建上半部分三角形
for (int i = 1; i < n; i++) {
int j = n + 1 - i; // 计算j的位置,使得三角形呈现斜向上递减的效果
mapp[i][j] = s[num++] - '0'; // 将字符串s中的字符转换为数字填入mapp数组对应位置
}
// 构建中间部分横向的数字序列
for (int i = 1; i < 2 * n; i++) {
mapp[n][i] = s[num++] - '0'; // 将字符串s中的字符转换为数字填入mapp数组对应位置
}
// 构建下半部分三角形
for (int i = n - 1; i > 1; i--) {
int j = n + i - 1; // 计算j的位置,使得三角形呈现斜向下递减的效果
mapp[i][j] = s[num++] - '0'; // 将字符串s中的字符转换为数字填入mapp数组对应位置
}
// 输出构建完成的图形
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n + i - 1; j++) {
if (mapp[i][j] < 0)
cout << "."; // 如果mapp数组中值为-1,输出'.'
else
cout << mapp[i][j]; // 输出mapp数组中的数字
}
cout << endl; // 换行输出下一行
}
return 0; // 返回程序执行成功的标志
}