山東省建設(shè)建設(shè)監(jiān)理協(xié)會(huì)網(wǎng)站長(zhǎng)沙正規(guī)競(jìng)價(jià)優(yōu)化推薦
目錄
- 前言
- 問題介紹
- 解決方案
- 代碼編寫
- java語言版本
- c語言版本
- c++語言版本
- 思考感悟
- 寫在最后
前言
當(dāng)前所有算法都使用測(cè)試用例運(yùn)行過,但是不保證100%的測(cè)試用例,如果存在問題務(wù)必聯(lián)系批評(píng)指正~
在此感謝左大神讓我對(duì)算法有了新的感悟認(rèn)識(shí)!
問題介紹
原問題
已知Math.random返回[0,1)范圍上的數(shù),那么落在[0,x)上的概率應(yīng)該是x
現(xiàn)在實(shí)現(xiàn)一個(gè)函數(shù)仍然返回[0,1)范圍的數(shù),但是要求[0,x)上的概率應(yīng)該是x^k次方,k為用戶輸入
比如k =2 ,返回的概率應(yīng)該是x^2
解決方案
原問題:
首先實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的x^2概率的函數(shù),如何做?
答案是:兩次rand取最大值即可
代碼編寫
java語言版本
原問題:
/*** 二輪測(cè)試:讓[0,x)區(qū)間上的出現(xiàn)概率變?yōu)閤^k* @param k* @return*/public static double randomXPowerKCp1(int k) {if (k < 1) {return 0;}double res = -1;for (int i = 0; i < k; i++) {res = Math.max(res, Math.random());}return res;}
c語言版本
正在學(xué)習(xí)中
c++語言版本
正在學(xué)習(xí)中
思考感悟
剛開始有點(diǎn)懵逼,后來才理解什么意思,原來就是進(jìn)行k次的rand,如果出現(xiàn)一次比x大的rand就返回那個(gè)大的值即可。那么如果所有值都沒有比x大,那么就返回[0,x)范圍的數(shù)。
最近工作比較忙,所以偷個(gè)小懶,但是后面會(huì)上一個(gè)開源自己寫的小組件,名字叫做httpTerminator(基于注解的http請(qǐng)求小工具,希望大家多多支持~)
寫在最后
方案和代碼僅提供學(xué)習(xí)和思考使用,切勿隨意濫用!如有錯(cuò)誤和不合理的地方,務(wù)必批評(píng)指正~
如果需要git源碼可郵件給2260755767@qq.com
再次感謝左大神對(duì)我算法的指點(diǎn)迷津!