2024华为OD机试真题-抢7游戏-(C++/Java/Python)-C卷D卷-200分

【华为OD机试】-(C卷+D卷)-2024最新真题目录

题目描述

A、B两个人玩抢7游戏,游戏规则为:

A先报一个起始数字 X(10 ≤ 起始数字 ≤ 10000),B报下一个数字 Y (X - Y < 3),A再报一个数字 Z(Y - Z < 3),以此类推,直到其中一个抢到7,抢到7即为胜者;

在B赢得比赛的情况下,一共有多少种组合?

输入描述

起始数字 M

  • 10 ≤ M ≤ 10000

如:

100

输出描述

B能赢得比赛的组合次数

用例1
输入 10
输出 1
说明
考点

动态规划

解题思路 

本题使用动态规划解题比较简单。假设B喊m,则在B之前A有可能喊m+1或m+2。因此,用dpb[i]表示B喊i时的组合数,dpa[i]表示A喊i时的组合数,可以得到动态转移方程:dpb[i]=dpa[i+1]+dpa[i+2],同理:dpa[i]=dpb[i+1]+dpb[i+2]。因为m是A喊出,因此dpa[m]=1,dpa[m+1]=0。dpb[m-1]=dpa[m]+dpa[m+1]。同时,dpa[m-1]=dpb[m]+dpb[m+1],数字m-1对A来说是叫不到的,因此dpa[m-1]=0,可得dpb[m]=0,dpb[m+1]=0.

最后,只需输出dpb[7]的值即可。

代码
c++
#include <bits/stdc++.h>
using namespace std;

int main() {
    int m;
    cin>>m;
    vector<int> dpa(m+2, 0);
    vector<int> dpb(m+2, 0);
    dpa[m]=1;
    for(int i=m-1;i>=7;i--) {
        dpa[i]=dpb[i+1]+dpb[i+2];
        dpb[i]=dpa[i+1]+dpa[i&#
  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

2024剑指offer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值