【笔试强训】Day2 --- 牛牛的快递 + 最小花费爬楼梯 + 数组中两个字符串的最小距离

文章目录

    • [1. 牛牛的快递](#1. 牛牛的快递)
    • [2. 最小花费爬楼梯](#2. 最小花费爬楼梯)
    • [3. 数组中两个字符串的最小距离](#3. 数组中两个字符串的最小距离)

1. 牛牛的快递

【链接】:牛牛的快递

解题思路:简单模拟题,主要是处理⼀下输⼊的问题。

cpp 复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a;
    char b;
    cin>>a>>b;

    int sum = 0;
    if(b == 'y') sum += 5;
    if(a <= 1)
    {
        sum += 20;
    }
    else 
    {
        sum += 20;
        // a -= 1;
        // sum += ceil(a); // 向上取整函数ceil
        double c = a - 1;
        if(c - (int)c > 0) sum += (int)c + 1;
        else sum += (int)c;
    }
    cout<<sum<<endl;
    return 0;
}

// #include <iostream>
// using namespace std;

// int main() {
//     double a;
//     char b;
//     cin>>a>>b;
//     int sum = 0;
//     if(b == 'y') sum += 5;
//     sum += 20;
//     a -= 1;
//     while(a > 0)
//     {
//         a--;
//         sum++;
//     }
//     cout<<sum<<endl;
//     return 0;
// }

2. 最小花费爬楼梯

【链接】:最小花费爬楼梯

解题思路:动态规划,简单线性 dp。

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

const int N = 1e5 + 10;

int cost[N];
int dp[N]; // dp[i]表示:爬到下标为i的台阶需要的最小费用

int main() {
    int n;
    cin >> n;
    for(int i = 0;i < n;i++)
        cin >> cost[i];

    for(int i = 2;i <= n;i++)
        dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

    cout << dp[n] << endl;
    return 0;
}

3. 数组中两个字符串的最小距离

【链接】:数组中两个字符串的最小距离

解题思路 :模拟 + 贪心:

◦ ⽤ prev1 标记 i 位置之前最近⼀次出现的第⼀个字符串的下标;

◦ ⽤ prev2 标记 i 位置之前最近⼀次出现的第⼆个字符串的下标。

cpp 复制代码
#include <iostream>
#include <string>
#include <climits>
using namespace std;

int main()
{
    int n;
    string s1, s2, s;

    cin>>n;
    cin>>s1>>s2;

    int prev1 = -1,prev2 = -1,ret = 0x3f3f3f3f;
    for(int i = 0;i < n;i++){
        cin >> s;
        if(s == s1) // 去找前面最近的s2
        {
            if(prev2 != -1)
                ret = min(ret, i - prev2);
            prev1 = i;
        }
        else if(s == s2) // 去找前面最近的s1
        {
            if(prev1 != -1)
                ret = min(ret, i - prev1);
            prev2 = i;
        }
    }
    //if(ret == 0x3f3f3f3f) cout<<-1<<endl;
    if(prev1 == -1 || prev2 == -1) cout<<-1<<endl;
    else cout<<ret<<endl;
    return 0;
}

相关推荐
MC皮蛋侠客7 小时前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程
郭涤生10 小时前
C++ 高性能编程最佳实践清单
开发语言·c++
.千余11 小时前
【C++】C++类与对象2:C++构造函数、运算符重载与流输入输出全面解析
c语言·开发语言·前端·c++·经验分享
郭涤生11 小时前
C++ 高性能状态机
开发语言·c++
酿情师11 小时前
Microsoft Visual C++ Build Tools 2026 下载与安装指南(Windows)
c++·windows·microsoft
cany100012 小时前
C++ -- 引用悬挂
c++
.千余12 小时前
【C++】C++类与对象3:const成员函数与取地址运算符重载,权限管理的艺术
开发语言·c++
QiLinkOS13 小时前
【用呼吸重构创造价值关系——QiLink生态】
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
朔北之忘 Clancy13 小时前
2026 年 3 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·考级
晚风予卿云月14 小时前
【前缀和】一维前缀和 & 二维前缀和
数据结构·c++·算法