【考试题解】 递归递推

本文介绍了四个递归递推相关的编程题目,包括车站问题、楼梯问题、猫的基因进化和猴子分栗子问题。每个题目都详细描述了问题背景、输入输出格式,以及解决方案,涉及递推公式和代码实现。
摘要由CSDN通过智能技术生成

T1:station

题目描述:
小 VHOS 带着 N 颗山楂球来到 A 班的阵地准备缩到位置上吃山楂球。
但是 A 班大佬们太强了,所以小 VHOS 每经过一个 A 班大佬身边, 他都需要交出他
手中一半的山楂(向下取整);
但是 A 班大佬看在小 VHOS 没吃午饭,都会从他们所拿的那一半中额外留出一颗山
楂球给小 VHOS。
经过重重的关口,小 VHOS 只剩下 X 颗山楂,他的午饭没了 qwq…小 VHOS 很菜,
他心情慌张,连自己还剩几颗山楂都不知道了 qwq…
所以帮小 VHOS 统计剩余山楂的任务就交给了你。
输入格式:
一行 2 个整数 N, M,表示原先带到 A 班的山楂总数, A 班同学的人数。
输出格式:
一行整数,表示小 VHOS 剩余的山楂球个数。
样例数据:
Sample Input Sample Output
8 1 5
数据规模与运行资源限制
对于 30%的数据, N≤10, M≤3;
对于 80%的数据, N≤1×105, M≤20;
对于 100%的数据, N≤1×107, M≤2×109;

如果你一看,这道题就是一个模拟,即80分,具体实现如下:
1.假设剩下的数量为n,则会取走n/2
2.那么会剩下n-n/2
3.因为A班的人很同情它要+1,所以剩下的是n=n-n/2+1
4.然后枚举1-i,n不断减少即可
假如你想拿100分,则必须要减少优化:
1.可以看出M>N,所以N除到一定大小的时候会在一个固定的数字徘徊
2.不难发现:2-2/2+1=2;3-3/2(c++运算下)+1=3时值保持固定不变,故加上特判对其优化即可.
具体代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    freopen("station.in","r",stdin);
    freopen("station.out","w",stdout);
    int n,m;
    cin>>n>>m;
    for (int i=1;i<=m;i++)
    {
        int take=n/2;
        n-=take;
        n++;
        if (n==2||n==3) break;
    }
    cout<<n;
    fclose(stdin);
    fclose(stdout);
    return 0;
}

T2:stairs

题目描述
OpportunityFan(以下简称 OF)正在准备体育考试,他为跳远感到忧愁。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值