| 
 
| <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.用总金额-已产生红包总金额作为最后一个红包的金额
 
 但是这样做有一个非常严重的问题,第一个红包的金额往往是最大的,最后一个红包的金额往往是最小的
 不知道应该怎样改才比较完美,还请大神不吝赐教。
 | 
 |