【Java】实现随机将一个整数拆分成若干个数

需求分析:

在练习抢红包这个题目时,需要将金额随机拆分成若干个红包,每个红包的金额数是随机的。

例如:

  • 发出100块的三个红包,一个人抢了71块,一个人抢了2块,最后一个人抢到了27块。

算法思路:

需要考虑的地方:

  1. 随机拆分一个整数为若干份
  2. 最小的值为1(不能有空红包)

将拆分的红包设为数组,数组的大小为红包个数。
用1填充数组,保证最小红包值。
随机生成红包序号,随机生成小于总金额数的数字,该数字加入该序号的红包。
循环以上过程,直到金额被分完。


代码实现:

/**
     * 抢红包随机数
     * @param sum 红包金额总数
     * @param size 红包个数
     * @return 分成的每个红包的金额数
     */
    private static int[] getPocketArray(int sum,int size) {
        int[] array = new int[size];

        //保证最小的红包数为1
        Arrays.fill(array, 1);
        int s = sum - size;
        Random r = new Random();

        while(s > 0) {
            int x = r.nextInt(size); //随机选择红包序列号
            int y = r.nextInt(s); //生成随机金额数

            if (s == 1){
                array[x]++;
                break;
            }else {
                array[x] += y;
            }
            s -= y;
        }
        return array;
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值