首页 > 其他分享 >30万员工抽奖

30万员工抽奖

时间:2024-09-06 22:51:48浏览次数:14  
标签:抽奖 int 30 员工 random winners static 65535 public

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;
    }
}

标签:抽奖,int,30,员工,random,winners,static,65535,public
From: https://blog.csdn.net/qq_53199639/article/details/141975155

相关文章

  • DeepMind新成果被批像广告?AlphaProteo可高效设计靶蛋白结合物,亲和力提高300倍
    AlphaFold在蛋白质预测领域一骑绝尘,AlphaFold3更是突破限制,实现了所有生命分子的预测,其发布时便有声音称,AlphaFold3的结构化预测与生成将加速AIDD(ArtificialIntelligence-drivenDrugDesign,AI驱动药物设计)的发展。如今,DeepMind面向AI药物设计再开一枪——发布用于......
  • 电力场景红外图像电力设备部件检测数据集VOC+YOLO格式3930张7类别
    数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):3930标注数量(xml文件个数):3930标注数量(txt文件个数):3930标注类别数:7标注类别名称:["arrester","breaker","bushing","curre......
  • 9.30~9.5 && 9.6~9.8小集训
    8.30~9.1给开学考试起了个一调的名不懂我考这玩意的意义(又不是放假前没考过总不能是考验我两个月不学whk还能记住多少吧......
  • CF1307(模拟赛记录)
    比赛页面偶然发现一道做过的G;C的罚时:没开longlong,谨记。然后一个小时没想出E……E题面:在一年成功的牛奶生产后,FarmerJohn奖励他的奶牛们它们最喜欢的美味的草。在田里有\(n\)个单位的排成一行的草,每个单位的草有甜味\(s_i\)。FarmerJohn有\(m\)头奶牛,每只都......
  • 2024.9.6 CF1307 模拟赛记录
    A:各捆干草间互相独立,所以优先移动距\(1\)近的。点击查看代码#include<bits/stdc++.h>#defineintlonglong#definepsbkpush_back#definefstfirst#definescdsecond#defineumapunordered_map#definepqueuepriority_queue#definevcvector#defineendl'\n'......
  • 「杂题乱刷2」CF1301C
    怎么没有二分的题解啊,写一篇。题目链接CF1301CAyoub'sfunction解题思路发现我们可以将问题转化成将\(n-m\)个\(1\)分成\(m\)份,设第\(i\)份的数字之和为\(sum_i\),则这样的分配方案的贡献为\(\frac{n\times(n+1)}{2}-\sum_{i=1}^{n}sum_i^2\)。容易发现要使......
  • PAT乙级 1030 完美数列 测试点3.4
    一、题目二、代码#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;boolcmp(longlonga,longlongb){ returna<b;}intmain(){ longlongn,p; cin>>n>>p; longlongnum=0,temp=0; ve......
  • 太原市公共自行车租赁管理系统的设计与实现 毕业设计源码25530
                                       目 录摘要1绪论1.1研究意义1.2公共自行车租赁管理系统现状1.3ssm框架介绍1.4论文结构与章节安排2 太原市公共自行车租赁管理系统系统分析2.1......
  • 2.6 某区域43.65km*58.2km的高程数据,画出该区域的三维表面图和等高线图,在A(30,0)和B(43,30)(
    点击查看代码importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3D#模拟高程数据(假设数据已经过某种方式插值或生成)#这里我们创建一个简单的40x50网格,并填充随机高程值x=np.linspace(0,43.65,40)y=np.linsp......
  • Ampleon BLL6H0514LS-130是一款设计精良的晶体管
    型号简介    BLL6H0514LS-130是Ampleon(安谱隆)推出的一款LDMOS功率晶体管,它拥有易于功率控制的特性,通过简单的栅极电压调节,就可以轻松地调整输出功率。此外,晶体管内部还集成了ESD保护电路,有效防止静电损坏,提高了器件的耐用性。型号规格品牌:Ampleon(安谱隆)型号:B......