js实现大乐透
生成大乐透号码的JavaScript实现
大乐透是一种彩票游戏,需要生成前区(1-35选5)和后区(1-12选2)的随机号码组合。以下是几种实现方式:
基础实现方法
使用Math.random()生成随机数并确保不重复:
function generateDLT() {
// 前区1-35选5
let front = [];
while(front.length < 5) {
let num = Math.floor(Math.random() * 35) + 1;
if(!front.includes(num)) front.push(num);
}
// 后区1-12选2
let back = [];
while(back.length < 2) {
let num = Math.floor(Math.random() * 12) + 1;
if(!back.includes(num)) back.push(num);
}
return {
front: front.sort((a,b) => a-b),
back: back.sort((a,b) => a-b)
};
}
优化版实现
使用Fisher-Yates洗牌算法提高效率:
function generateDLTOptimized() {
// 生成前区
let frontPool = Array.from({length:35}, (_,i) => i+1);
for(let i = frontPool.length-1; i > 0; i--) {
const j = Math.floor(Math.random() * (i+1));
[frontPool[i], frontPool[j]] = [frontPool[j], frontPool[i]];
}
let front = frontPool.slice(0,5).sort((a,b) => a-b);
// 生成后区
let backPool = Array.from({length:12}, (_,i) => i+1);
for(let i = backPool.length-1; i > 0; i--) {
const j = Math.floor(Math.random() * (i+1));
[backPool[i], backPool[j]] = [backPool[j], backPool[i]];
}
let back = backPool.slice(0,2).sort((a,b) => a-b);
return {front, back};
}
使用方法
调用上述函数并输出结果:
const ticket = generateDLT();
console.log('前区号码:', ticket.front.join(', '));
console.log('后区号码:', ticket.back.join(', '));
// 或者格式化输出
console.log(`大乐透号码: ${ticket.front.join(' ')} + ${ticket.back.join(' ')}`);
批量生成多注
如果需要生成多注号码:

function generateMultipleDLT(count) {
let results = [];
for(let i=0; i<count; i++) {
results.push(generateDLT());
}
return results;
}
// 生成5注
const multiTickets = generateMultipleDLT(5);
multiTickets.forEach((ticket, index) => {
console.log(`第${index+1}注: ${ticket.front.join(' ')} + ${ticket.back.join(' ')}`);
});
这些实现方法可以满足基本的大乐透号码生成需求,优化版在大批量生成时性能更好。实际应用中可根据需要添加号码校验、历史记录比对等功能。






