Java一个简单的红包生成算法
一个简单的红包生成算法,代码如下:
/** * 红包 * @param n * @param money 单位:分 * @return **/ public static double[] redPacket(int n, double money) { // 红包结果 double[] result = new double[n]; // 随机数 double[] randNum = new double[n]; // 随机总数 double randSum = 0; // 保证每个人都分到一分钱,扣除后分配 double redSum = money - n; // 先随机,生成指定个数的随机数 for (int i = 0; i < randNum.length; i++) { randNum[i] = Math.random() * redSum; randSum += randNum[i]; } // 重新分配 double left = redSum; // 设置随机红包结果 for (int i = 0; i < result.length-1; i++) { // 取整 result[i] = Math.round(randNum[i] / randSum * redSum); left -= result[i]; // 每人至少一分钱 result[i] = (result[i] + 1) * 1.0 / 100; } // 设置最后一个红包 result[n-1] = (left + 1) * 1.0 / 100; return result; }
算法很简单,仅供参考,有考虑不到之处,欢迎指正!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
Java随机数算法原理与实现方法实例详解
本文实例讲述了Java随机数算法.分享给大家供大家参考,具体如下: 软件实现的算法都是伪随机算法,随机种子一般是系统时间 在数论中,线性同余方程是最基本的同余方程,"线性"表示方程的未知数次数是一次,即形如: ax≡b (mod n)的方程.此方程有解当且仅当 b 能够被 a 与 n 的最大公约数整除(记作 gcd(a,n) | b).这时,如果 x0 是方程的一个解,那么所有的解可以表示为: {x0+kn/d|(k∈z)} 其中 d 是a 与 n 的最大公约数.在模 n 的完全剩余系
-
史上最全的java随机数生成算法分享
复制代码 代码如下: String password = RandomUtil.generateString(10); 源码如下: 复制代码 代码如下: package com.javaniu.core.util;import java.util.Random;public class RandomUtil { public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS
-
java随机数生产算法实例
java提供了Math.random()函数,返回一个double类型的随机数,也有util包里的Random类,可以生成double,int,float,long,bytes等随机数. 但有些业务需求,往往需要对这些方法做一下封装.比如用固定因子生成32位的3DES算法key值. 下面提供一些封装的方法: package test; import java.util.Random; public class RandomUtil { public static final String ALL
-
Java垃圾回收之分代收集算法详解
概述 这种算法,根据对象的存活周期的不同将内存划分成几块,新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法.可以用抓重点的思路来理解这个算法. 新生代对象朝生夕死,对象数量多,只要重点扫描这个区域,那么就可以大大提高垃圾收集的效率.另外老年代对象存储久,无需经常扫描老年代,避免扫描导致的开销. 新生代 在新生代,每次垃圾收集器都发现有大批对象死去,只有少量存活,采用复制算法,只需要付出少量存活对象的复制成本就可以完成收集:可以参看我之前写的Java垃圾回收之复制算法详解 老年代
-
Java利用递归算法实现查询斐波那契数
package 斐波那契数; import java.util.Scanner; class 斐波那契数 { public static void main(String[] args) { System.out.println("请输入想查询的第几个斐波拉楔数"); long n = new Scanner(System.in).nextLong(); System.out.println(f(n)); } private static int f(long n) { if(n==1
-
java生成抽样随机数的多种算法
本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 概述: 这里你是不是会说,生成随机数有什么难的?不就是直接使用Java封装好了的random就行了么?当然对于一般情况下是OK的,而且本文要说明的这些算法也是基于这个random库函数的. 本文主要是针对抽样这一行为进行的,而抽样本身有一个隐含的规则就是不要有重复数据.好了,有了这些说明.你可以先尝试着用一些自己的想法来实现不重复地生成随机数. 算法尝试: 一些好的算法出现,往往伴随着一些不那么好的算法.但是对于效果不太好的算法
-
Java实现获取指定个数的不同随机数
两个简单的例子,代码实现如下: 1.随机拆分一个整数 public static List<Integer> randomList(int n){ Random rand = new Random(); List<Integer> list = new ArrayList<>(); int i = 0; while (i < n) { int num = rand.nextInt(n); if (!list.contains(num)) { list.add(nu
-
Java排序算法之堆排思想及代码实现
在介绍堆排序前,我们需要了解一下一种数据结构 -- 顶堆. 什么是顶堆? 它是一颗完全二叉树,顶堆有大顶堆和小顶堆两种.所谓大顶堆就是在这颗完全二叉树中,任何一颗子树都满足:父结点的值 > 孩子结点的值:小顶堆则相反. 如图: 什么是堆排序(Heapsort)? 利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素. 现在给我们一个无序数组,我们将其从小到大排序,使用堆排序的实现步骤和思想如下: 1.让这个数组变成一个大根堆 2.将最后一
-
Java垃圾回收之标记压缩算法详解
之前写过的一篇Java垃圾回收之标记清除算法详解 ,这个算法有个缺点就是造成内存碎片,存在不连续的空间,这样会导致申请较大空间的时候,又需要进行垃圾回收.下面介绍一下标记压缩算法,可以避免内存碎片. 空白部分是不连续的. 概述 这个算法的标记清除阶段,跟Java垃圾回收之标记清除算法详解 中的是一样的,而对于压缩阶段,它的工作就是移动所有的可达对象到堆内存的同一个区域中,使他们紧凑的排列在一起,从而将所有非可达对象释放出来的空闲内存都集中在一起,通过这样的方式来达到减少内存碎片的目的.如下图:
-
Java计算器核心算法代码实现
在进行一个表达式的计算时,先将表达式分割成数字和字符串然后利用出入栈将分割后的表达式进行中缀转后缀,再将后缀表达式进行计算得到结果(思想在上一篇写过)现在贴下Java语言的代码实现.(学习Java时间不长所以可能会有很多不足的地方,我会改进也欢迎大神可以给我一些意见和建议~谢谢啦) 我将这部分分成三个方法完成功能,并在getResult方法调用(getResult方法被主方法调用) private String getResult(String str) { //分割 String[] Str
随机推荐
- 最常用的15个前端表单验证JS正则表达式
- springMVC实现前台带进度条文件上传的示例代码
- Java字符串详解的实例介绍
- JS判断页面加载状态以及添加遮罩和缓冲动画的代码
- Smarty模板快速入门
- Android实现直接播放麦克风采集到的声音
- C#面向对象设计的七大原则
- js获取IP地址的方法小结
- 提高网页效率的14条注意事项图文第1/3页
- .net的命名空间类库的简单介绍
- linux shell实现判断输入的数字是否为合理的浮点数
- jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
- JS获取表格内指定单元格html内容的方法
- 让网页根据不同IE版本显示不同的内容
- Flash+XML滚动新闻代码 无图片 附源码下载
- Android代码实现AdapterViews和RecyclerView无限滚动
- 对Java的面对对象编程中对象和引用以及内部类的理解
- 详解Android跨进程IPC通信AIDL机制原理
- python实现飞机大战微信小游戏
- springboot相关面试题汇总详解