+ -
当前位置:首页 → 问答吧 → 有一道很有挑战的js题目,貌似很简单,其实很xx

有一道很有挑战的js题目,貌似很简单,其实很xx

时间:2010-05-20

来源:互联网

有数字1,2,3,4,5,6

随即显示5个数字。

并且1出现的几率最高,然后依次是2,3,4,5,6。请问,如何写出js。。。。。。

作者: sdw65063251   发布时间: 2010-05-20

这完全是数学问题,苦手..好好想一下

作者: ariesjia   发布时间: 2010-05-20

几率为:

1:30%,2:20%,3:20%,4:15%;5:10%,6:5%;

作者: sdw65063251   发布时间: 2010-05-20

如果几率能用参数传进去就更好了。。

作者: sdw65063251   发布时间: 2010-05-20

一般都是用这个算法:
<script type="text/javascript"> function FRandom(){ var _dict = {}; var sumWeight = 0.0; this.Add = function(item, weight){ if (isNaN(weight) || weight < 0) throw '参数weight 不能小于0'; _dict[item] = weight; sumWeight += weight; }; this.Random = function(){ var rndSumWeight = Math.random() * sumWeight; var j = 0.0; for (var item in _dict) { j += _dict[item]; if (j >= rndSumWeight) { return item; } } return null; }; } // 调用演示 ----------------------------------------------------------- var frnd = new FRandom(); frnd.Add('北京', .30); frnd.Add('上海', .30); frnd.Add('广州', .25); frnd.Add('深圳', .15); var tcount = 500; var results = {}; var i=tcount; while(i-- > 0){ var trnd = frnd.Random(); results[trnd] = (results[trnd]||0)+1; document.write(trnd, ' '); } document.write('<hr size="1" />'); for(var x in results){ document.write(x, ': ', results[x] / tcount, '<br />'); } </script>
 提示:您可以先修改部分代码再运行

作者: panliu888   发布时间: 2010-05-20

1.可以定义一个空数组var arr=[];
2.保证每个数字的机率之和是100%
3.把每种概率的数字存到这个数组里
4.随机这个数组arr[ Math.round(Math.random()*100)]
---------------------Code
复制内容到剪贴板
代码:
<script type="text/javascript">
var _s={1:.4,2:.2,3:.1,4:.3};
function R(O){
var _arr=new Array();  //空数组
var _sumO=0;   
var _acc=100;  //精确度
this.check=function(){
var str = Math.round(Math.random() * _acc);
return _arr[str];
    };
    
return function(){
    for(var p in O){
        _sumO+=O[p]*_acc;
        for(var _i=0;_i<O[p]*_acc;_i++)
        {_arr.push(p);}
        }
    if(_sumO>_acc || _sumO<=0)
    {alert('必须保证每个数字的机率之和是100%');
    return false;}
    }();
}
var goR=new R(_s);
for(var i=0;i<10;i++)
document.body.innerHTML+=goR.check()+",";
</script>

作者: stri   发布时间: 2010-05-20

谢谢楼上的各位朋友

作者: sdw65063251   发布时间: 2010-05-20

学习了,可以用到抽奖程序上面,非常好~

作者: xiaotian_s   发布时间: 2010-05-20

我分了两步
1.如果已知各个对象出现概率
2.随机给出各个对象概率,保证100>=x1>=x2>=x3...>=xn>=0


1.已知各个对象出现概率,随机取出一个对象
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> </BODY> <SCRIPT LANGUAGE="JavaScript"> <!-- var data={a:20,b:50,c:30}; //su 函数说明 //给定若干对象以及对象出现的频率实现随机 function getRandom(myData){ var random=Math.random()*100; var start=0; var end=0; var status=false; for(var name in data){ end=end+data[name]; //alert(start+"\t"+end) if(start<=random&&random<end){ alert(name) status=true; } start=start+data[name]; } //给定所有概率之和<100 if(!status){ //其他情况 } } getRandom(data) </SCRIPT> </HTML>
 提示:您可以先修改部分代码再运行
2.随机给出数组中的各个对象出现的概率(概率之和有时候不到一百,是因为考虑到除了这些,还有其他对象,比如彩票一等奖,二等奖。。。没有中奖的概率,当然,彩票中奖级别概率应该反过来,由小变大)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> </BODY> <SCRIPT LANGUAGE="JavaScript"> <!-- function probabilityN(pre,s,n){ var count=n; var next=(100-s)/n; var a=Math.min(100-s-next,(pre-next)); r=parseInt(Math.random()*(a)+next); return r; } var probabilities=[]; function getProbabilities(pre,s,n){ r=probabilityN(pre,s,n); probabilities.push(r); n=n-1; s=s+r; if(n>0){ getProbabilities(r,s,n); } return probabilities; } var shuzu=getProbabilities(100,0,5) function sumArray(arr){ var s=0; for(var i=0;i<arr.length;i++) s=s+arr[i] return s; } alert(shuzu+"\t"+sumArray(shuzu)) //--> </SCRIPT> </HTML>
 提示:您可以先修改部分代码再运行
[ 本帖最后由 su1216 于 2010-5-21 11:47 编辑 ]

作者: su1216   发布时间: 2010-05-21

我和老外的中式婚礼,大家提提意见!

http://www.51hongzhuang.com
http://www.dhunyan.com
中式婚礼
中式礼服婚宴酒店婚礼跟拍

作者: hongzhuang   发布时间: 2010-05-21

楼上广告?

作者: su1216   发布时间: 2010-05-21