30万员工抽奖

30万个员工,其工卡号码分别是1~30万,抽10万个员工发奖品。有一个随机数生成函数rand()能够生成(0~65535]的整数,请写一个公平的抽奖程序,输出这10万个员工的工卡号码

利用rand5生成rand7算法的原理

import java.util.*;
public class Main {
    private static final int NUM_EMPLOYEES = 300000;
    private static final int NUM_WINNERS = 100000;
    private static final int MAX_RAND = 65535;

    public static void main(String[] args) {
        Set<Integer> winners = fairLottery();
        System.out.println("Number of winners: " + winners.size());
        System.out.println("Winners: " + winners);
    }

    public static Set<Integer> fairLottery() {
        Set<Integer> winners = new HashSet<>();
        Random random = new Random();

        while (winners.size() < NUM_WINNERS) {
            int randomNumber = generateEmployeeNumber(random);
            winners.add(randomNumber);  // 利用 HashSet 自动去重
        }

        return winners;
    }

    // 生成 [1, 300000] 范围的随机数
    public static int generateEmployeeNumber(Random random) {
        while (true) {
            int part1 = rand(random);  // 生成 [1, 65535]
            int part2 = rand(random);  // 生成 [1, 65535]

            // 合成一个更大的随机数
            long largeRand = (long) (part1 - 1) * MAX_RAND + part2;

            // 映射到 [1, 300000] 范围
            if (largeRand <= (long) NUM_EMPLOYEES * MAX_RAND) {
                return (int) ((largeRand - 1) % NUM_EMPLOYEES + 1);
            }
        }
    }

    // 模拟 rand() 函数,返回 [1, 65535] 之间的随机整数
    public static int rand(Random random) {
        return random.nextInt(MAX_RAND) + 1;
    }
}

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React员工名称抽奖网页是一个基于React技术开发的网页应用,旨在帮助公司内部进行员工名称抽奖活动。 首先,该网页应具备用户登录和注册功能,这样只有公司内部员工才能参与抽奖活动。登录后,每个员工可以看到自己的个人信息和抽奖记录。 在首页上,应该展示当前正在进行的抽奖活动以及相关细节。员工可以点击进入相应的抽奖活动页面。 抽奖活动页面应该显示活动的名称、时间、规则等。员工可以查看即将参与的抽奖活动。页面中应该有一个抽奖按钮,员工可以点击进行抽奖。 点击抽奖按钮后,页面会实时显示抽奖过程,包括正在抽取的员工名字、抽取的时间等。最终会展示出获得奖品的员工,并将信息保存在数据库中。 为了公平起见,应该为每个员工设置相同的抽奖机会。抽奖过程应该是公开透明的,员工可以通过查看抽奖记录来核实结果。同时,为了保证抽奖结果的随机性,可以利用React中的随机函数来实现。 此外,网页还需要提供管理员后台,用于管理抽奖活动和员工信息。管理员可以创建新的抽奖活动,设置活动细节,并为员工分配抽奖机会。管理员还可以查看和导出抽奖记录,方便抽奖结果的统计和分析。 最后,为了提升用户体验,在网页中可以加入一些动画效果和音效,使整个抽奖过程更加生动有趣。 综上所述,React员工名称抽奖网页通过简洁的界面、完善的功能和友好的用户体验,能够有效地为公司内部的员工名称抽奖活动提供便利和乐趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值