本文主要是介绍C#算法题:随机生成1-100,越靠近中位(50、51)的数概率越大,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天策划提了个比较特殊的要求:随机生成1-100,越靠近中位(50、51)的数概率越大。
目前想到的,首先还是用随机数的方法,就是把每个数得一个比例值,比如说1的概率值为1...33的概率值为33...100的概率值为1;最后加上所有的概率值,随机出来一个数。解码得出最终随机出来的数。
代码如下:
public int GetCentre(){var _all = 0;for (var _i = 1; _i <= 100; _i++){if (_i <= 50) _all += _i;else _all += 101 - _i;}//Debug.Log("总概率为" + _all);int _ran = Random.Range(0, _all) + 1;//Debug.Log("取到的值为" + _ran);var _add = 0;for (var _i = 1; _i <= 100; _i++){if (_i <= 50) _add += _i;else _add += 101 - _i;if (_add > _ran) return _i;}return 100;}
测试一下:
for (var _i = 0; _i < 10000; _i++){Debug.Log(GetCentre()/10);}
结果为:
0~9和90~100分别为175和238次;
10~19和80~89分别为545和687次;
20~29和70~79分别为960和1031次;
30~31和60~69分别为1311和1492次;
41~49和50~59分别为1725和1836次;
结果比较符合预期。
这篇关于C#算法题:随机生成1-100,越靠近中位(50、51)的数概率越大的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!