ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

程序员的算法趣题:Q23 二十一点通吃(Java版)

2021-03-16 10:30:58  阅读:193  来源: 互联网

标签:剩余 Java 硬币 int 下注 depth Q23 趣题 coin


题目说明

赌场经典的二十一点游戏中,每回合下注 1 枚硬币,
赢了可以得到 2 枚硬币(+1枚),输了硬币会被收走(-1枚)。
假设最开始只拥有 1 枚硬币,并且每回合下注 1 枚,
那么 4 回合后还能剩余硬币的硬币枚数变化情况如图所示,
共有 6 种(圆形中间的数字代表硬币枚数)
Q23二十一点通吃
求最开始拥有 10 枚硬币时,持续 24 回合后硬币还能剩余的硬币枚数变化情况共有多少种?
题目转化为:
10枚硬币,每次下注1枚。
赢了+1枚,输了-1枚。
硬币输完了则立刻结束游戏。
求:能坚持24轮且还有剩余硬币的情况有多少种?

思路

用递归方法表示一轮下注,记录“硬币数量”“距离成功还剩多少轮”
当硬币数量为0时,表示失败;当剩余轮数为0时,表示成功。
记录失败+成功的总数

代码

public static void main(String[] args) {
    // 10枚硬币,需要持续24轮下注才算成功
    System.out.println(game(10, 24));
}
/**
 * 每调用一次该方法,表示进行了一轮下注。
 * @param coin  剩余硬币数
 * @param depth 还要进行多少轮才算成功
 * @return 有多少种情况
 */
private static int game(int coin, int depth){
    if(coin == 0) return 0;     // 没有硬币了,退出游戏
    if(depth == 0) return 1;    // 成功情况+1

    // 本轮赢了的情况
    int win = game(coin + 1, depth - 1);     // 硬币数量+1,剩余轮数-1

    // 本轮输了的情况
    int lose = game(coin - 1, depth - 1);    // 硬币数量+1,剩余轮数-1

    return win + lose;
}

结果

16051010

标签:剩余,Java,硬币,int,下注,depth,Q23,趣题,coin
来源: https://blog.csdn.net/lanying100/article/details/114868821

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有