等腰三角形

题目描述

本题目要求你在控制台输出一个由数字组成的等腰三角形。

具体的步骤是:

  1. 先用 1,2,3... 的自然数拼一个足够长的串

  2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。

比如,当三角形高度是 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;  // 返回程序执行成功的标志
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值