剑指offer-题43:n个骰子的点数

该博客介绍了如何计算n个骰子投掷后点数之和的所有可能结果及其出现的概率。作者提供了Java代码实现,返回一个映射,其中键是点数之和,值是该点数出现的次数。对于求概率,只需将次数除以6的n次方。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。

实验平台:牛客网


解决思路:

这里写图片描述
这里写图片描述

这题牛客网上没有,我直接把所有的代码贴上来,我这里返回类型是map类型的,key是n个骰子和的值,value是其次数,求概率的话用value除以6的n次方即可,代码如下:

java:

package offer;

import java.util.HashMap;
import java.util.Map.Entry;

/**
 * 剑指offer-题43:n个骰子的点数
 * 
 * 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
 */

public class Test43 {
    int maxValue = 6;

    public HashMap<Integer, Integer> appearCount(int n) {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        if (n > 1) {
            int[][] array = new int[2][maxValue * n + 1];
            int flag = 0;
            // 设置只有一个骰子时的情况,1~6每个数只会出现一次
            for (int i = 1; i <= maxValue; i++) {
                array[flag][i] = 1;
            }
            for (int k = 2; k <= n; k++) {
                for (int i = 0; i < k; i++) {
                    array[1 - flag][i] = 0;
                }
                for (int i = k; i <= k * maxValue; i++) {
                    array[1 - flag][i] = 0;
                    for (int j = 1; j <= i && j <= maxValue; j++) {
                        array[1 - flag][i] += array[flag][i - j];
                    }
                }
                flag = 1 - flag;
            }
            for (int i = n; i <= n * maxValue; i++) {
                map.put(i, array[flag][i]);
            }
        }
        return map;
    }

    public static void main(String[] args) {
        HashMap<Integer, Integer> resultMap = new Test43().appearCount(3);
        for (Entry<Integer, Integer> entry : resultMap.entrySet()) {
            System.out.println("骰子和:" + entry.getKey() + ",出现次数:" + entry.getValue());
        }
    }
}

当n为3时,返回结果如下图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值