前段时间被问这个问题,最近有空就写写啦,还是挺有趣的

首先做下抢红包方法分类:

对于发红包的人来说,一共有大致3类(其他的我暂时没想到,有想到可以联系我呀~)

一、拼手气红包个数不定(完全看运气)

二、拼手气红包规定个数(个数一定,至少一分)

三、平均分红包(个数一定,大家平分)还是这个好写是吧!嘿嘿

上代码:

<?php
var_dump(rob_red_bages(5 , 10)); var_dump(distribute_red_bages(5)); /*
方法主要功能:拼手气红包(个数不定)
一个参数
参数一: 红包总金额(按分计算)
*/
function distribute_red_bages($sum){
$sum = $sum*100;
$i=0;
while($sum>0){
$temp = rand(1 , $sum);//红包值
$sum -= $temp;
$arr[$i++] = $temp/100;
}
//check($arr);
return $arr;
} /*
方法主要功能:均分红包
两个参数:
参数一: 红包总金额
参数二: 均分个数
*/
function average_red_bages($sum , $num){
$res = $sum/$num;
for($i=0 ; $i<$num ; $i++){
$arr[$i] = $res;
}
//check($arr);
return $arr;
} /*
方法主要功能:规定个数的手气红包
两个参数:
参数一:红包总金额
参数二:红包个数 计算流程,随机生成num个数
求和得到m
用sum/m 得到每个数需要k
用随机数*k
*/
function rob_red_bages($sum , $num){
$sum = $sum*100;
for($i=0 ; $i<$num ; $i++){
$temp = rand(1 , $sum);
$arr[$i] = $temp;
$sumall += $temp;
}
$k = $sum/$sumall;
for($i=0 ; $i<sizeof($arr); $i++){
$arr2[$i] = $arr[$i]*$k/100;
}
return $arr2;
} /*红包总额检测*/
function check($arr){
foreach($arr as $a){
$sum += $a;
echo $a."+";
} echo " 0 =".$sum."\n";
} ?>

下面分析下拼手气红包吧(平分的就不说了,大家都会):

拼手气红包个数不定思路:(总金额:sum)

---->随机第一个小于sum的数: n

---->总金额减去该数: temp = sum-n

---->随机一个小于temp的数

---->递归上述方法直到总金额为0

---->返回存储随机结果的数组

这个方法比较常规,用来实现规定个数的红包也是可以实现的!不过~

拼手气红包规定个数思路(总金额 sum,红包个数 num )

---->随机num个小于sum的数,生成数组

---->对这些数求和得到allsum

---->用sum除以allsum得到所有生成数的公倍数

---->数组每个元素与公倍数相乘得到每个红包的的数值

这个方法有缺点(最终的结果可能会略大于sum,或者略小于sum 因为除法可能出现无理数)

大概就是这些啦!欢迎交流指正!~~~

PHP 红包功能代码的更多相关文章

  1. 微信红包功能(含示例demo)

    开通支付权限 登录微信公众平台管理后台,找到“微信支付”一栏,进行开通会跳转到“微信支付商户平台”,根据提示提交相关证明,完成支付权限的开通开通之后,“微信支付”一栏会显示相关信息,在“开发-接口权限 ...

  2. 用.NET Core实现一个类似于饿了吗的简易拆红包功能

      需求说明 以前很讨厌点外卖的我,最近中午经常点外卖,因为确实很方便,提前点好餐,算准时间,就可以在下班的时候吃上饭,然后省下的那些时间就可以在中午的时候多休息一下了. 点餐结束后,会有一个好友分享 ...

  3. php红包功能

    最近公司要开发 广告红包功能,这是写好的代码先放到这 https://files.cnblogs.com/files/jxkshu/PHP%E5%B9%BF%E5%91%8A%E7%BA%A2%E5% ...

  4. 微信小程序发送红包功能。填坑记录

    微信官方文档 1.开通条件 (1)商户号已入驻90日 (2)商户号有连续30天正常交易 (3)只有企业资质的商户才有资格申请 2.注意事项 (1)目前小程序红包仅支持用户微信扫码打开小程序 (2)小程 ...

  5. C#开发微信门户及应用(38)--微信摇一摇红包功能

    摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...

  6. 原生JS实现购物车结算功能代码+zepto版

    html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  7. 常见.NET功能代码汇总 (2)

    常见.NET功能代码汇总 23,获取和设置分级缓存 获取缓存:首先从本地缓存获取,如果没有,再去读取分布式缓存写缓存:同时写本地缓存和分布式缓存 private static T GetGradeCa ...

  8. 通过javascript库JQuery实现页面跳转功能代码

    通过javascript库JQuery实现页面跳转功能代码的四段代码实例如下. 实例1: 1 2 3 4 $(function(){ var pn = $("#gotopagenum&quo ...

  9. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  10. 20个开发人员非常有用的Java功能代码

    本文将为大家介绍20个对开发人员非常有用的Java功能代码.这20段代码,可以成为大家在今后的开发过程中,Java编程手册的重要部分. 1. 把Strings转换成int和把int转换成String ...

随机推荐

  1. aspose word与pdf互转

    aspose word与pdf互转 package com.example.core.mydemo.aspose; import com.aspose.words.Document; import c ...

  2. springcloud之FeignClient访问微服务接口缓慢

    springcloud之FeignClient访问微服务接口缓慢查询服务日志报错如下:Caused by: java.net.SocketTimeoutException: Read timed ou ...

  3. Coap 协议学习:具体协议介绍具体

    协议框架 CoAP默认运行在UDP上,但它也支持运行在SMS,TCP等数据传输层上.本文主要是基于UDP上的CoAP协议介绍 1.消息模型 Messages COAP协议通信是通过在UDP上传输消息类 ...

  4. OpenCV程序练习(四):人脸识别

    一.人脸检测 准备图片 代码 import cv2 img=cv2.imread("Faces.jpeg") faceCascade=cv2.CascadeClassifier(' ...

  5. Java常见问题-多线程

    现在有 T1.T2.T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行? 这个多线程问题比较简单,可以用 join 方法实现. 在 Java 中 Lock 接口比 ...

  6. 6.Class 与 Style 绑定

    操作元素的 class 列表和内联样式是数据绑定的一个常见需求. 因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可. 不过,字符串拼接麻烦且易错.因此,在 ...

  7. Mybatis 二级缓存的使用

    Mybatis二级缓存 简介:二级缓存是namesace级别的,多个SqlSession去操作同个namespace下的Mapper的sql语句,多个SqlSession可以共用二级缓存,如果两个ma ...

  8. 图扑低代码数字孪生 Web SCADA 智慧钢厂

    2024 年 4 月,中国钢铁工业协会发布了<钢铁行业数字化转型评估报告(2023年)>(以下简称<报告>).<报告>指出,绝大部分钢铁企业建立了数字化转型相关管理 ...

  9. 操作系统|SPOOLing(假脱机)技术

    什么是假脱机技术,它可以解决什么问题? 什么是脱机技术 要回答什么是假脱机技术,首先我们需要知道什么是脱机技术.<计算机操作系统(第四版)>写道: 为了解决人机矛盾及CPU和I/O设备之间 ...

  10. 深度解读GaussDB(for MySQL)与MySQL的COUNT查询并行优化策略

    本文分享自华为云社区<[华为云MySQL技术专栏]GaussDB(for MySQL)与MySQL的COUNT查询并行优化策略>,作者:GaussDB 数据库. 1.背景介绍 统计表的行数 ...