【简单】调整[0,x)区间上的数出现的概率-Java
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/troubleshooter
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other; /** * 调整[0,x)区间上的数出现的概率 * * 【题目】 * 假设函数Math.random()等概率随机返回一个在[0,1)范围上的数,那么我们知道,在[0,x)区间上的数出现的概率为x(0<x≤1)。 * 给定一个大于0的整数k,并且可以使用Math.random()函数,请实现一个两函数依然返回在[0,1)范围上的数,但是在[0,x)区间上 * 的数出现的概率为×^k(0<x≤1)。 * * 【难度】 * 简单 * * 【解答】 * 实现在区间[0,x)上的数返回的概率是x^2,只用调用2次Math.random(),返回最大的那个数即可。即如下代码中的randXPower2 * 方法。 * 解释起来也很简单,如果randXPower2要想返回在[0,x)区间上的数,两次调用Math.random()的返回值都必须落在[0,x)区间上, * 否则会返回大于x的数,所以概率为x^2。 * 同理,想让区间[0,x)上的数返回的概率是x^k,只用调用k次Math.random(),返回最大的那个数即可。具体请参看如下代码中的 * randXPowerK方法。 * * @author Created by LiveEveryDay */ public class Adjust0xSectionNumberProbability<K, V> { public static double randXPowerK(int k) { if (k < 1) { return 0; } double r = -1; for (int i = 0; i != k; i++) { r = Math.max(r, Math.random()); } return r; } public static void main(String[] args) { System.out.printf("The result is: %f", randXPowerK(3)); } } // ------ Output ------ /* The result is: 0.782760 */