掷骰子问题

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

#include "stdafx.h"
#include <vector>
#include <iostream>
#include <math.h>
using namespace std;

void num_cnt(int offset,int* cnt,int num,int sum)
{
	if(num==0)
	{
		cnt[sum-offset]++;
		return;
	}
	else
	{
		for(int i=1;i<=6;i++)
		{
			num_cnt(offset,cnt,num-1,sum+i);
		}
	}
	return;
}

void probality(int num)
{
	int *cnt=new int[6*num-num+1];
	memset(cnt,0,(6*num-num+1)*sizeof(int));
	int sum=0;

	num_cnt(num,cnt,num,sum);

	double base=6.0;
	double total=pow(base,num);
	for(int i=0;i<6*num-num+1;i++)
	{
		cout<<cnt[i]<<" ";
	}
	cout<<endl;

	return;
}

void num_cnt1(int n)
{
	int* s[2];
	s[0]=new int[n*6+1];
	s[1]=new int[n*6+1];

	for(int i=0;i<n*6+1;i++)
	{
		s[0][i]=0;
		s[1][i]=0;
	}
	for(int i=1;i<=6;i++)
	{
		s[0][i]=1;
	}

	int flag=1;
	for(int k=2;k<=n;k++)
	{
		for(int j=1;j<6*n+1;j++)
		{
			s[flag][j]=0;
		}

		for(int j=k;j<=6*k;j++)
		{
			for(int m=(j-6>=k-1 ? j-6 : k-1);m>=k-1 && m<j;m++)
			{
				s[flag][j]+=s[1-flag][m];
			}
		}
		flag=1-flag;
	}

	for(int i=n;i<=6*n;i++)
	{
		cout<<s[1-flag][i]<<" ";
	}
	cout<<endl;

	return ;
}

int main(void)
{
	int n=3;

	num_cnt1(n);
	probality(n);

	system("pause");
	return 0;
}
时间: 2024-11-25 21:49:12

掷骰子问题的相关文章

华为历年试题(掷骰子游戏 7)

问题描述: 在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示: 1)  9:无障碍 2)  1:停掷一轮,即下轮所掷数字无效: 3)  2:后退两步,如果已经到起点不再后退: 4)  3:奖励前进一步 如果在游戏过程中,已经走到地图终点,则游戏结束.根据输入的地图数组,和5个骰子数的数组,返回最终玩家前进了多少步. 要求实现函数: void dice(int map_len, int* map, int* dice_val, in

模拟算法_掷骰子游戏&amp;&amp;猜数游戏

模拟算法是用随机函数来模拟自然界中发生的不可预测的情况,C语言中是用srand()和rand()函数来生成随机数. 先来介绍一下随机数的生成: 1.产生不定范围的随机数 函数原型:int rand() 产生一个介于0~RAD_MAX间的整数,其具体值与系统有关系.Linux下为2147483647.我们可以在include文件夹中的stdlib.h中可以看到(Linux在usr目录下,Windows在安装目录下) 1 #include<stdio.h> 2 #include<stdlib

第21本:《上帝掷骰子吗?》

第21本:<上帝掷骰子吗?> 这是一本关于量子论的科普读物,不过作者曹天元把一系列人物和实验用一种小说的形式讲 述了下来,很感叹作者深厚的理论知识和文字功底.这本书在豆瓣上评分在9.3-9.4,我的GTD阅读清单是按照评分顺序来整理的,超过9分的读物如果不 优先阅读真有点对不起书名里的上帝. 这类书既然是科普知识类的书,就很难找到可以执行的行动,这些知识体系能让你的视野开阔,当思考一个问题时不能被其表面现象所迷惑,任何一个定律都 不是绝对适用的.在读到能量不是连续的,而是一份一份的,再想到计算

骑士飞行棋第一版(掷骰子方法分开)

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 骑士飞行棋 8 { 9 class Program 10 { 11 12 //在下面的数组存储我们游戏地图各个关卡 13 //数组的小标为0的元素对应地图上的第一格 下标为1的元素对应第二格...下标为n的元素对应n+1

上帝掷骰子吗:量子物理史话

body { font-family: Microsoft YaHei UI,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bo

掷骰子

问题: 游戏规则: 两个人轮流掷骰子6次,并将每次投掷得点数累加起来,点数多者获胜. 要求求出玩家玩100局之后谁是最终的获胜者. #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *ar

【Java自学】掷骰子游戏

1 package codeTask_FangFa; 2 /*5.29 掷骰子游戏. 规则: 3 扔两个骰子,计算和. 2.3或12(称作掷骰子)你就输了,7或11(称作自然),你就赢了.如果是其他数字. 4 继续掷,直到出来一个7(你输了)或者出来一个和刚才一样的(你赢了). 5 */ 6 7 import java.util.Random; 8 public class ZhiTouZi { 9 public static void main(String[] args){ 10 11 Sy

上帝掷骰子吗? 计算机程序构造解释 奇思妙想-摘要

书籍部分概要 上帝掷骰子吗-量子物理史话 假如一个物理概念是无法测量的,它就是没有意义的.对于这个物我合一的世界来说,任何东西都应该是可以测量和感知的.只有可观测的量才是存在的!(不完全性定理,海森堡不确定性原理 低维世界无法感知高维世界,即解释高维世界.或者我相信原子是四维的或者是多维的总之是高于三维世界存在的,所以表现出波力二象性 .)二维度的语言无法描述高维信息,因此语言或表述方法决定了我们能看的多远. 理论决定了我们能够观察什么,(即同样的心智模式.一个人的认知决定了 他能观察到什么事物

华为机试—掷骰子游戏

在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示: 1)9:无障碍 2)1:停掷一轮,即下轮所掷数字无效: 3)2:后退两步,如果已经到起点不再后退: 4)3:奖励前进一步 如果在游戏过程中,已经走到地图终点,则游戏结束.根据输入的地图数组,和5个骰子数的数组,返回最终玩家前进了多少步. 示例 1)输入:map_len = 15, map = {9,1,9,9,9,2,9,9,9,9,9,9,9,9,9},dice_val = {

掷骰子游戏窗体实现--Java初级小项目

掷骰子 **多线程&&观察者模式 题目要求:<掷骰子>窗体小游戏,在该游戏中,玩家初始拥有1000的金钱,每次输入押大还是押小,以及下注金额,随机3个骰子的点数,如果3个骰子的总点数小于等于9,则开小,否则开大,然后判断玩家是否押对,如果未押对则扣除下注金额,如果押对则奖励和玩家下注金额相同的金钱. 分析:这个题目要求灵活运用多线程的相关知识,达到点击开始按钮时,有3个线程启动,分别控制3颗骰子的转动,在3颗骰子全部转完以后,回到主线程计算游戏结果. 1 //3个线程控制3颗骰