Day 2

1.牛牛的快递(pass)

牛牛的快递

1.1解析

在这里插入图片描述

1.2代码

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

int main() {
    float a;
    char b;
    cin>>a>>b;
    int price=0;//结果
    if(b=='y')price+=5;//加急
    if(a<=1.0) cout<<(price+20);
    else 
    {
        price+=20;//先加上起步价
        a--;
        //price+=ceil(a);//向上取整函数
        if(a-(int)a>0)price+=(int)a+1;
        else price+=(int)a;
        cout<<price;
    }
}

2.最小花费爬楼梯 (pass)

最小花费爬楼梯
技能:线性dp

2.1解析

在这里插入图片描述

2.2代码

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

int main() {
    int n=0;
    cin>>n;
    vector<int> cost(n);
    for(int i=0;i<n;i++)
        cin>>cost[i];
    
    vector<int> dp(n+1);
    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];
}

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

数组中两个字符串的最小距离
技能:哈希、双指针、字符串

3.1解析

在这里插入图片描述

在这里插入图片描述

3.2代码

//运行超时了
//O(N^2)
#include <iostream>
#include<vector>
#include<limits.h>
using namespace std;

int main() {
    int n=0;
    cin>>n;
    string str1,str2;
    cin>>str1>>str2;
    vector<string> strs(n);
    for(auto& str:strs) cin>>str;

    int ret=INT_MAX;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            if((strs[i]==str1&&strs[j]==str2)||(strs[i]==str2&&strs[j]==str1))
                ret=min(ret,abs(i-j));
    }
    if(ret==INT_MAX)cout<<-1;
    else
    cout<<ret;
}
//优化->时间复杂度:O(N)
#include <iostream>
#include<vector>
#include<limits.h>
using namespace std;

int main() {
    int n=0;
    cin>>n;
    string str1,str2;
    cin>>str1>>str2;
    vector<string> strs(n);
    for(auto& str:strs) cin>>str;

    int prev1=-1,prev2=-1,ret=INT_MAX;
    for(int i=0;i<n;i++)
    {
        if(strs[i]==str1)//向前找最近的str2
        {
            prev1=i;
            if(prev2!=-1)
                ret=min(ret,prev1-prev2);
        }
        if(strs[i]==str2)//向前找最近的str1
        {
            prev2=i;
            if(prev1!=-1)
                ret=min(ret,prev2-prev1);
        }
    }
    if(prev1==-1||prev2==-1)//判断str1/str2是否存在
        cout<<-1;
    else
        cout<<ret;
}
假设用户输入的 `N` 值为 8,以下是 `else if(N>1)` 部分的运行过程: #### 初始状态 ```c count = 1; day = 2; day1 = 1; day2 = 1; ``` 此时,已经经过了 2 天,当前兔子数量 `count` 为 1。 #### 第一次循环 - `count = day1 + day2`:`count = 1 + 1 = 2` - `day1 = day2`:`day1` 变为 1 - `day2 = count`:`day2` 变为 2 - `day++`:`day` 变为 3 此时,经过了 3 天,当前兔子数量 `count` 为 2。 #### 第二次循环 - `count = day1 + day2`:`count = 1 + 2 = 3` - `day1 = day2`:`day1` 变为 2 - `day2 = count`:`day2` 变为 3 - `day++`:`day` 变为 4 此时,经过了 4 天,当前兔子数量 `count` 为 3。 #### 第三次循环 - `count = day1 + day2`:`count = 2 + 3 = 5` - `day1 = day2`:`day1` 变为 3 - `day2 = count`:`day2` 变为 5 - `day++`:`day` 变为 5 此时,经过了 5 天,当前兔子数量 `count` 为 5。 #### 第四次循环 - `count = day1 + day2`:`count = 3 + 5 = 8` - `day1 = day2`:`day1` 变为 5 - `day2 = count`:`day2` 变为 8 - `day++`:`day` 变为 6 此时,经过了 6 天,当前兔子数量 `count` 为 8,满足 `count >= N` 的条件,循环结束。 最终输出的 `day` 值为 6,表示达到 8 只兔子需要 6 天。 ```c #include<stdio.h> int main() { int N = 8; int day = 0; int day1 = 1; int day2 = 1; int count; if (N == 1) { day = 1; } else if (N > 1) { count = 1; day = 2; while (count < N) { count = day1 + day2; day1 = day2; day2 = count; day++; } } printf("%d", day); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值