`
sunlujing
  • 浏览: 179833 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面试题 抛骰子8次 和为多少的概率最大

阅读更多

一道笔试题,抛骰子8次,和为多少最大,对于笔试题可以这样考虑,两个骰子和为 7的概率最大,8次的话最大为28.

下面编程给出说明,result[i][j] 代表抛i次时,和为j 的次数。对于第i+1 次可使用前面的结果来计算,如计算 result[i+1][48] 可以 把result[i][48-1], result[i][48-2],result[i][48-3],result[i][48-4],result[i][48-5],result[i][48-6] 的值加起来,这样的话就可以自底向上的推出任意次抛骰子的和的结果。

算法如下:

 

public static void rollDice(int cnt){
		int result[][] = new int[cnt+1][cnt*6+1];
		result[1][1]=1;
		result[1][2]=1;
		result[1][3]=1;
		result[1][4]=1;
		result[1][5]=1;
		result[1][6]=1;
		for(int i=2; i <= cnt;i++){
		  for(int j=i;j<=i*6;j++){
			  for(int k=1;k<=6;k++){
				  if(k<j){
					  result[i][j] +=result[i-1][j-k];
				  }
			  }
		  }	
		}
		for(int i=cnt;i<=cnt*6;i++){
			System.out.println("sum "+i+"\tcnt: "+result[cnt][i]);
		}
		
	}
	
    public static void main(String[] args) {
		rollDice(8);
	}

//result
sum 8	cnt: 1
sum 9	cnt: 8
sum 10	cnt: 36
sum 11	cnt: 120
sum 12	cnt: 330
sum 13	cnt: 792
sum 14	cnt: 1708
sum 15	cnt: 3368
sum 16	cnt: 6147
sum 17	cnt: 10480
sum 18	cnt: 16808
sum 19	cnt: 25488
sum 20	cnt: 36688
sum 21	cnt: 50288
sum 22	cnt: 65808
sum 23	cnt: 82384
sum 24	cnt: 98813
sum 25	cnt: 113688
sum 26	cnt: 125588
sum 27	cnt: 133288
sum 28	cnt: 135954
sum 29	cnt: 133288
sum 30	cnt: 125588
sum 31	cnt: 113688
sum 32	cnt: 98813
sum 33	cnt: 82384
sum 34	cnt: 65808
sum 35	cnt: 50288
sum 36	cnt: 36688
sum 37	cnt: 25488
sum 38	cnt: 16808
sum 39	cnt: 10480
sum 40	cnt: 6147
sum 41	cnt: 3368
sum 42	cnt: 1708
sum 43	cnt: 792
sum 44	cnt: 330
sum 45	cnt: 120
sum 46	cnt: 36
sum 47	cnt: 8
sum 48	cnt: 1

 

1
2
分享到:
评论
8 楼 liurun_225 2013-06-09  
介题目是玩麻将的人出的么???

默认两个6面骰子么。。。唉。。。
7 楼 ansjsun 2013-06-03  
最大熵问题吧...期望
6 楼 sunlujing 2013-06-03  
yscyfy 写道
你学过概率论这问题很好算的啊,根本不是个程序的问题,就是个多维随机变量的概率分布的问题,  直接就能得到结果

大哥能不能给个公式啊,我数学不怎么行的~
5 楼 Alex丿 2013-06-02  
额,表情是参数8, OOP模拟环境
4 楼 Alex丿 2013-06-02  
package com.trial;

public class Dice {

private int min;
private int max;

public Dice(int min, int max) {
this.min = min;
this.max = max;
}

public int getMin() {
return min;
}

public int getMax() {
return max;
}

}
3 楼 Alex丿 2013-06-02  
package com.trial;

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

public class DiceTool {

/**
* 点数和与出现次数的映射
*/
private Map<Integer , Integer> timeMap;

/**
* 抛骰子
* @param dice
* @param time
* @return
*/
public  Map<Integer , Integer> cast(Dice dice, int time) {
timeMap = new HashMap<Integer, Integer>();
castSum(dice, 0, time);
return timeMap;
}

/**
* 每一轮的点数计数
* @param dice
* @param sum
* @param time
*/
public void castSum(Dice dice, int sum, int time) {
for (int i=dice.getMin(); i<=dice.getMax(); i++) {
if (time == 1) {
if (timeMap.get(sum + i) == null) {
timeMap.put(sum + i, 1);
} else {
timeMap.put(sum + i, timeMap.get(sum + i) + 1);
}
} else {
castSum(dice, sum + i, time - 1);
}
}
}

public static void main(String[] args) {
Dice dice = new Dice(1, 6);
Map<Integer, Integer> map = new DiceTool().cast(dice,;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "\t\t:" + entry.getValue());
}
}

}
2 楼 yscyfy 2013-06-02  
你学过概率论这问题很好算的啊,根本不是个程序的问题,就是个多维随机变量的概率分布的问题,  直接就能得到结果
1 楼 bro_feng 2013-06-02  
我觉得可以优化的,入参可以是n%6,因为骰子1-6的概率是相同的,所以8次的结果是(n/6 *(1+2+3+4+5+6)) + (n%6 和的最大值)

相关推荐

    微软的面试题及答案 非常好,很难找

    面试是求职过程中的关键环节,尤其对于技术岗位,面试题往往具有挑战性和创新性。微软作为全球知名的科技公司,其面试题不仅考察候选人的专业技能,还涉及逻辑思维、问题解决和创新能力。以下是对部分微软面试题的...

    java程序员招聘面试题

    【Java程序员面试题解析】 Java面试题广泛涵盖了基础语法、数据结构、算法、设计模式、框架、并发编程、数据库、网络、操作系统等多个方面。以下是一些常见面试题的解析: **第一组** 1. **烧绳计时问题**:这是一...

    微软面试题---微软面试

    这些题目是典型的微软面试题,涵盖了逻辑思维、数学、概率、物理、工程设计等多个领域,旨在测试应聘者的创新能力、问题解决能力和逻辑推理能力。以下是对这些题目的详细解析: 第一组: 1. 计时一小时十五分钟:...

    面试常见基础算法题总结

    17. **N个骰子出现和为m的概率**:可以用动态规划计算,dp[i]表示i个骰子掷出总和为m的概率。 18. **海量数据问题**:通常涉及数据压缩、分布式存储、MapReduce等技术,优化算法和数据结构以减少I/O操作。 19. **...

    微软的面试题及答案

    ### 微软面试题解析 #### 第一组 **1. 烧绳计时问题** 题目描述:有若干条材质相同但燃烧不均匀的绳子,如何通过这些绳子组合来精确计时一个小时十五分钟? 解答思路:首先,我们需要了解单根绳子燃烧的特性。...

    微软面试题(经典提问)

    ### 微软面试题经典知识点解析 #### 第一组知识点解析 **1. 使用烧绳计时** - **问题描述**:假设有一根不均匀的绳子,从头烧到尾需要1小时。如何利用这种绳子来精确计时1小时15分钟? - **解析**: - 首先,取...

    巨人数值策划笔试题(含答案)1

    再来看一个赌博问题:赌徒在掷两次骰子,点数之和大于3则赢,赔率1.1。这是概率论的应用。计算所有可能的点数组合,发现赢的概率大于50%,因此值得尝试。 第四题是著名的“蒙提霍尔问题”:选择门后是否应该改变...

    java面试趣味题目(含答案)

    ### Java面试趣味题目解析 #### 第一组题目解析 **1. 如何利用烧绳方法计时一个小时十五分钟?** 解答:对于这个问题,首先要明白一根不均匀的绳子从头燃烧到尾需要一个小时的时间。要实现计时一个小时十五分钟,...

    微软的面试题和答案(超变态但很经典).docx

    【微软面试题解析】 这些题目看似简单,实则蕴含了丰富的逻辑思维、数学知识和问题解决技巧,是微软等科技公司面试中常见的智力挑战。让我们逐一解析: **第一组** 1. **计时问题**:这是一道典型的逻辑题,需要...

    一个很好的微软面试题

    7. 两个骰子可以设置为1和2,表示月份,其他面设置1-31表示日期。 **第四组** 1. 海盗问题:1号提出99、0、0、1、0的方案,2号、3号、4号会投票通过,因为他们如果不接受会被丢弃。 2. 飞机加油问题:至少需要2架...

    微软的面试题及答案超变态但是很经典.docx

    【微软面试题解析】 这些题目主要考察面试者的逻辑思维、问题解决能力、创新思维和对基本概念的理解。让我们逐一分析: 第一组: 1. 计时一个小时十五分钟:使用两根绳子,第一根绳子对折后点燃,烧完是半小时;...

    微软的面试题及答案-超变态但是很经典

    这些题目是微软面试中的一些经典问题,旨在考察应聘者的逻辑思维、问题解决能力、创新思考和应变技巧。下面对这些问题进行详细解答: **第一组** 1. 要计时1小时15分钟,可以烧两根绳子,第一根绳子先点燃一端,另...

    微软的面试题及答案.pdf

    6. 最大概率选中红球:将所有红球放入一个罐子,蓝球放入另一个,这样每次选中红球的概率是50%。 7. 6面骰子日期设计:一个骰子表示月份,一个表示日期,可以覆盖1月到12月,1号到31号。 **第四组** 1. 海盗分宝石...

    deuhsbq微软_面试题及答案定义.pdf

    这些题目是微软面试中可能遇到的问题,涵盖了逻辑推理、数学、概率、问题解决等多个领域,旨在测试应聘者的思维能力和创新能力。下面对这些题目进行详细解答: 1. 烧绳计时:要计时1小时15分钟,可以点燃两根绳子,...

    微软的面试题及答案-超变态但是很经典.docx

    【微软面试题】是软件行业中常见的一种评估求职者思维能力、逻辑推理和问题解决技巧的方式。以下是对这些题目中涉及的知识点的详细解析: **第一组** 1. 烧绳计时问题考察的是时间管理和逻辑思考。解决方法是:先...

    微软面试题及答案(很需要开放性思维啊)宣贯.pdf

    这些题目主要考察的是应聘者的逻辑思维能力、问题解决技巧、创新思维和决策能力,这些都是IT行业尤其是软件开发和系统分析领域非常重要的素质。下面我们逐一解析这些题目中的知识点: 1. **烧绳计时**:这道题目的...

    微软面试题及答案(很需要开放性思维啊).pdf

    这些题目主要测试的是应聘者的逻辑思维能力、问题解决技巧以及创新思考。让我们逐一解析这些题目背后的逻辑和...这些题目展示了面试中可能遇到的开放性问题,旨在考察应聘者在压力下的思考、问题解决和创新思维能力。

Global site tag (gtag.js) - Google Analytics