算法最优解 算法最优解
首页
目录
赞助
GitHub (opens new window)
首页
目录
赞助
GitHub (opens new window)
  • 数据结构基础

  • 数组

  • 位运算

  • 动态规划

  • 图

  • 区间

  • 链表

  • 矩阵

  • 字符串

  • 树

  • 堆

  • 逻辑思维

    • 赛马
    • 土匪也疯狂
    • 使用rand5实现rand7
      • 题目描述
      • 思路解析
      • 代码实现
      • 概率分析
    • 三门问题
    • 狼爱上羊?
    • 会玩的一家人
    • 烧绳子
    • 有问题的球
    • 蛋蛋破碎的临界点
    • 通往offer之门
    • 最后的颜色
    • 贴标签
  • 目录
  • 逻辑思维
华南溜达虎
2024-07-08
目录

使用rand5实现rand7

# 使用rand5实现rand7

# 题目描述

已知rand5()可以等概率随机获得[0,1,2,3,4]中的一个数字。要求用rand5()来实现一个rand7(),使得rand7()可以等概率获得[0,1,2,3,4,5,6]中的一个数字。

# 思路解析

对rand5()随机两次,获得一个坐标(x,y),x=rand5,y=rand5。坐标(x,y)有25种可能,选取每3个坐标代表[0,1,2,3,4,5,6]中的一个数字,会用掉21个坐标。当(x,y)落在剩余的4个坐标中时,重复生成(x,y),直到(x,y)有对应的数字。

# 代码实现

int rand5();
int rand7() {
	//坐标(x,y)和数字的映射
	int matrix[][5] = {
		{0, 0, 0, 1, 1},
		{1, 2, 2, 2, 3},
		{3, 3, 4, 4, 4},
		{5, 5, 5, 6, 6},
		{6, -1, -1, -1, -1}
	}
	
	int x = rand5(), y = rand5();
	while (matrix[x][y] == -1) {
		x = rand5();
		y = rand5();
	}
	return matrix[x][y];
}

# 概率分析

rand7()获得[0,1,2,3,4,5,6]中的每个数字的概率为3/25 + 4/25 * 3/25 + 4/25 * 4/25 * 3/25 +... =1/7,符合题意。

上次更新: 2024/07/08, 20:31:33
土匪也疯狂
三门问题

← 土匪也疯狂 三门问题→

Theme by Vdoing | Copyright © 2024-2024 华南溜达虎 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式