A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

<import java.util.Scanner;
import java.util.Random;
public class HongBao {
        public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);
                Random rd=new Random();
                System.out.println("请输入您要发的总金额...");
                double mon=sc.nextDouble();
                System.out.println();
                System.out.println("请输入您要发的红包的数量...");
                int num=sc.nextInt();
                //System.out.println("Hello World!");
                /*int[][] arr=new int[4][4];
                arr[1][3]=3;s
                System.out.println(arr[1][3]);*/
                System.out.println();
                int money=(int)(mon*100);    //将金额转化为 分
                int a=0;  //记录已产生红包的总金额
                double res=0.0; //存储当前红包的金额数;
                for(int i=1;i<=num;i++) {     //随机产生num个红包
                        if(i==num) {
                            res=(double)(money-a)/100;
                        }else {
                    int b=rd.nextInt(money-a-num+i)+1;  //随机产生一个金额,金额的最大值为 总金额数-已发金额数
                        a+=b;
                        res=(double)b/100;}
                        System.out.println();
                        System.out.println("第"+i+"个红包的金额是:\t"+res);
                }

        }
}
>
我的大致思路是:
1.接收用户输入的红包总金额和要发的红包的个数,并将红包总金额扩大100倍,
2.在(总金额-剩余红包数)(为了保证每个红包至少有1分钱)的范围内产生一个随机数,将这个随机数的缩小100倍,作为第一个红包的金额。
3.在(总金额-已产生红包总金额-剩余红包数)的范围内产生一个随机数,将这个随机数的缩小100倍,作为第二个红包的金额。
4.重复3的操作,直至产生倒数第二个红包
5.用总金额-已产生红包总金额作为最后一个红包的金额

但是这样做有一个非常严重的问题,第一个红包的金额往往是最大的,最后一个红包的金额往往是最小的
不知道应该怎样改才比较完美,还请大神不吝赐教。

2 个回复

正序浏览
把红包分好了,放到list集合里,打乱再发不就行了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报 1 0
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马