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;
}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
过河卒是一个典型的动态规划问题。首先,我们将整个棋盘看作一个二维数组,数组的每个元素表示到达该位置的路径数目。然后,我们根据题目给出的条件,逐步更新数组中的元素,直到计算出到达目标位置的路径数目。 具体的解题思路如下: 1. 首先,我们可以将马的位置设置为0,表示无法经过该位置。 2. 然后,我们根据马的位置,更新数组中的元素。对于二维数组中的每个位置,我们根据左边和上边的位置来计算到达当前位置的路径数目。具体地,如果左边和上边的位置都可以经过,那么到达当前位置的路径数目就等于左边和上边位置的路径数目之和。如果左边或上边的位置无法经过,那么到达当前位置的路径数目就等于左边或上边位置的路径数目。 3. 最后,我们输出目标位置的路径数目。 下面是洛谷p1002过河卒题解C++代码: ```cpp #include <bits/stdc++.h> using namespace std; int main() { long long a[21][21]; int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; // 初始化数组,马的位置设置为0 for(int i=0; i<=20; i++) { for(int k=0; k<=20; k++) { a[i][k] = 1; } } a[x2][y2] = 0; // 根据马的位置更新数组中的元素 if(x2 >= 2 && y2 >= 1) a[x2-2][y2-1] = 0; if(x2 >= 1 && y2 >= 2) a[x2-1][y2-2] = 0; if(x2 <= 18 && y2 >= 1) a[x2+2][y2-1] = 0; if(x2 <= 19 && y2 >= 2) a[x2+1][y2-2] = 0; if(x2 >= 2) a[x2-2][y2+1] = 0; if(x2 >= 1) a[x2-1][y2+2] = 0; if(y2 >= 1) a[x2+2][y2-1] = 0; if(y2 >= 2) a[x2+1][y2-2] = 0; // 动态规划计算路径数目 for(int i=1; i<=20; i++) { for(int k=1; k<=20; k++) { if(a[i][k] != 0) { a[i][k] = a[i-1][k] + a[i][k-1]; } } } // 输出目标位置的路径数目 cout << a[x1][y1] << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mine Shin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值