C++洛谷题解(33)——P5721

题目信息

题名:数字直角三角形

题目:给出 n,请输出一个直角边长度是 n 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。

输入格式:输入一个正整数 n。

输出格式:输出如题目要求的数字直角三角形。

分析题目

先来解释一下:“所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。”这句话中的2位指的是数的位数统一为2,即1变为01,2变为02。直到9改为09。(因为本人阅读理解能力真心不怎么样,活生生能把阅读理解的阅读题写成程序编写题,所以本人读这句话时没明白过来,特来解释)

这道题很简单,废话不多说,直接说思路:

  1. 声明三角形n,行数sum,数值k并初始化为1
  2. 输入n的值
  3. 遍历1~n之间的所有数,并且遍历1~sum之间的所有数
  4. 输出三角形

这道题到这里还没完,需要细说一下输出三角形的部分也是最重要的部分:

  1. 判断k是否是个位数,如果是的话需要先输出一个0后再输出k的值
  2. 如果k是十位数直接输出k的值即可,不用考虑
  3. 每输出k的值后累加k的值
  4. 然后需要换行,需要写在第一个循环里
  5. 最后累减sum的值

这道题到这里就完成了

示例代码

#include <bits/stdc++.h> //万能头
using namespace std;
long n, sum, k = 1; //三角形n,行数sum,和数值k
int main()
{
    cin >> n;                    //输入n
    sum = n;                     //默认sum=n
    for (int i = 1; i <= n; i++) //循环n遍
    {
        for (int j = 1; j <= sum; j++) //循环sum遍,相当于再次循环n遍
        {
            if (k < 10)
            {                   //如果k小于10
                cout << 0 << k; //那么前面加0后输出k
            }
            else
            {
                cout << k; //否则直接输出k
            }
            k++; // k累加
        }
        cout << endl; //换行
        sum--;        //别忘了sum减去1
    }
    system("pause"); //可加可不加
    return 0;        //结束
}

到这里还没完,近两期忘了加“复制版”代码。

复制版:

#include <bits/stdc++.h>
using namespace std;
long n, sum, k = 1;
int main()
{
    cin >> n;
    sum = n; 
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= sum; j++)
        {
            if (k < 10)
            {
                cout << 0 << k;
            }
            else
            {
                cout << k;
            }
            k++;
        }
        cout << endl;
        sum--;
    }
    system("pause");
    return 0;
}

 从下一期开始,“示例代码”部分会细分注释版和复制版,以免忘记

posted @ 2022-07-19 19:46  GitTJBKBeta  阅读(71)  评论(0编辑  收藏  举报