一个抽奖系统的算法

openphp 2009-12-06 03:31:52
1-33中随机抽取6个,让其6个数字不重复,用js输出
...全文
314 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunchao2009 2010-11-11
  • 打赏
  • 举报
回复
6楼容易成为牛人。。 思维独特。。
sunchao2009 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 click_me 的回复:]
HTML code

<script type="text/javascript">
<!--
function getRandom(max, min){
var max = parseFloat(max);
var min = parseFloat(min);
return Math.floor(Math.random()*(……
[/Quote]



3楼代码写的很漂亮 但从抽奖的角度来讲算是有BUG。。。。
你判断重复的方式有点问题。。
while(result.join(',').indexOf(curr) != -1){
curr = getRandom(min, max+1).toString();
} //是判断新生成的数字 之前有没有重复。
也就是说如果前面出现了12,13这两个随机数,后面连02,03都排除了,因为数字2,3在前面也找得到。。


z834341362 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 openphp 的回复:]
result.push(('0' + curr).slice(-2)); 这句话是什么意思??
[/Quote]
意思是:将curr前面加上一个0形成一个新的字符串,然后取该字符串的最后两位,形成一个新的元素,放到result数组的末尾,
chen_xiangguo 2009-12-07
  • 打赏
  • 举报
回复

//产生一个1-33的数组
function createArr(){
var arr = [];
var n;
var has=false;
for (var i = 0; i < 6; i++) {
has=true;
while (has) {
has=false;
n = Math.floor(Math.random() * 33) + 1;//1-33
for (var j = 0; j < arr.length; j++) {
if (arr[j] == n) {
has = true;
break;
}
}
}
arr.push(n);
}
return arr;
}
openphp 2009-12-07
  • 打赏
  • 举报
回复
result.push(('0' + curr).slice(-2)); 这句话是什么意思??
houdonghui1987 2009-12-07
  • 打赏
  • 举报
回复
<script language="javascript">
function AscSort(x, y)
{
return x == y ? 0 : (x > y ? 1 : - 1 );
}
function getNum(){
document.getElementById("divId").innerText="红球:";
document.getElementById("divId2").innerText="蓝球:";
var n=getRed();
n.sort(AscSort);
for(var i=0;i<6;i++){
document.getElementById("divId").innerText+=n[i]+" ";
}
y=true;
while(y==true){
var n=Math.floor(Math.random()*16);
if(n>0){
y=false;
if(n<10)
n='0'+n;
document.getElementById("divId2").innerText+=n+" ";
}
}
}
function getRed(){
var n=new Array();
var i=0;
do{
var yn=false;
var m=Math.floor(Math.random()*34);
if(m>0){
for(j=0;j<i;j++){
if(n[j]==m)
yn=true;
}
}else{
yn=true;
}
if(yn==false){
if(m<10)
m='0'+m;
n[i]=m;
i++;
}
}while(i<6);
return n;
}
</script>
<body>
<input value="嘿嘿" type="button" onClick="javascript:getNum();" />
<div id="divId" style="color:#F00; font-size:14px">红球:</div>
<div id="divId2" style="color:#00F; font-size:14px">蓝球:</div>
</body>
</html>
openphp 2009-12-06
  • 打赏
  • 举报
回复
好的 谢谢你 界分
sohighthesky 2009-12-06
  • 打赏
  • 举报
回复

var arr={};
var getNumber=function() {
var n=parseInt(Math.random()*33)+1;//1-33;
if(!arr[n]) {
arr[n]=n;
return n;
}
else//如果已经存在重新生成
return arguments.callee();
}
for(var i=0;i<6;i++) {
document.write(getNumber()+"<br/>");//输出6个号码
}
Click_Me 2009-12-06
  • 打赏
  • 举报
回复

晕 楼主的是 33选6
var min = 1, max = 33, count = 6, weishu = 2; // 把第一行参数换成这样

Click_Me 2009-12-06
  • 打赏
  • 举报
回复

// 参数说明
var min = 1, max = 32, count = 6, weishu = 2; //这样就是32选6

min: 最小数 max 最大数 count 所选球数 weishu就是要显示球号的固定位数
Click_Me 2009-12-06
  • 打赏
  • 举报
回复

<script type="text/javascript">
<!--
function getRandom(max, min){
var max = parseFloat(max);
var min = parseFloat(min);
return Math.floor(Math.random()*(max - min)+min);
}

function t31in7(){
var min = 1, max = 31, count = 7, weishu = 2;
var result = [], curr = 0;
for(var i = 0; i < count; i++){
curr = getRandom(min, max+1).toString();
while(result.join(',').indexOf(curr) != -1){
curr = getRandom(min, max+1).toString();
}
result.push(('0' + curr).slice(-2));
}
document.getElementById('re').innerHTML = result.join(' ');
}

//-->
</script>
<input type="button" value="31in7" onclick="t31in7();" />
<div id="re" style="color:red"></div>

qqzeng-ip 2009-12-06
  • 打赏
  • 举报
回复
c# 我就懂
openphp 2009-12-06
  • 打赏
  • 举报
回复
求救啊

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧