美文网首页
发红包程序的设计

发红包程序的设计

作者: 云龙789 | 来源:发表于2019-01-25 14:53 被阅读10次
  • 代码
<?php

/**
 * 发红包
 * @param int $sum 要发放的总金额
 * @param int $number 要发放的人数
 * @return array  返回的数组是每个人对应的金额
 */
function devide_money($sum = 50, $number = 10)
{
    $arr = [];
    for ($i = 1; $i <= $number; $i++) {
        $arr[] = rand(10, 100);
    }
    $sum_money = array_sum($arr);
    echo '10-100之间随机数的总金额' . $sum_money;

    array_walk($arr, function (&$item) use ($sum, $sum_money) {
        $item = $sum / $sum_money * $item;
        $item = sprintf('%.2f', $item);
    });
    // 这时候的 array_sum($arr) 应该是一个接近50的值,因为有除法,我们取的是两位的小数
    // 与50比较,多或者少,都给最后一个用户
    $result_sum = array_sum($arr);
    echo '<br> 红包发放到每个人的原始总值' . $result_sum;
    if ($result_sum !== $sum) {
        $diff = $sum- $result_sum; // 如果是正数,表述有多余的,负数,表示值多算了
        // 获取最后一个值,并更改
        end($arr); // 注意 end key 函数必须单独写,而不能放在一块
        $last_key = key($arr);
        $last_value = $arr[$last_key];
        $arr[$last_key] = $last_value + $diff;
    }
    echo '<br> 更新最后一个人的红包金额后的总值' . array_sum($arr);
    return $arr;
}

$res = devide_money();
echo '<pre>';
print_r($res);
image.png
  • 设计思路
  • 保证每个红包都是公平的随机值,rand(10, 100);
  • 红包生成后会有一个总金额 sum_money,这个金额肯定和我们输入的金额 sum 不对等
  • 解决每个红包金额比例对等问题 sum/sum_money*$item
  • 这时候的总金额与输入的红包金额值是接近的,要解决差额的问题,处理到最后一个红包

领取红包

领取红包可以直接 array_pop($arr) 这种方式领取,不过如果你想重新打乱红包的顺序,建议有两种方式

注意 array_rand 取出来的是键
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>

相关文章

  • 发红包程序的设计

    代码 设计思路 保证每个红包都是公平的随机值,rand(10, 100); 红包生成后会有一个总金额 sum_mo...

  • 计算机二级考试

    C语言程序设计、VB语言程序设计、Java语言程序设计、Access数据库程序设计、C++语言程序设计、MySQL...

  • C++之程序设计方法

    一、程序设计概念等 结构化程序设计特点: 程序设计=数据结构+算法程序内容=过程+过程调用 面向对象的程序设计方法...

  • 一、计算机、程序和Java概述

    一、计算机、程序和Java概述 1、什么是程序设计? 程序设计就是创建软件,程序设计往往以某种程序设计语言为工具,...

  • C语言函数一本道来

    函数的由来 程序=数据+算法C程序=数据+函数 模块化程序设计模块化程序设计.png 面向过程的程序设计 以过程为...

  • 程序设计语言|分类与特点

    程序设计语言基本上可以分为:命令式程序设计语言、函数式程序设计语言、面向对象程序设计语言和逻辑程序设计语言。 1....

  • 三、对象与类

    面向对象程序设计概述 面向对象的程序设计(简称OOP)时当今主流的程序设计范型,已经取代了“结构化”过程化程序设计...

  • 进程

    1单道程序设计和多道程序设计 单道程序设计:一个程序在系统中运行,结束后下一道程序开始执行。 多道程序设计:多道程...

  • C++模板template用法

    引言 模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标...

  • 思维导图如何辅助程序设计师工作

    程序设计师就是针对客户的需要,对程序进行功能和个性化设计的设计人员,而程序设计是给出解决特定问题程序的过程,包括分...

网友评论

      本文标题:发红包程序的设计

      本文链接:https://www.haomeiwen.com/subject/rkwmjqtx.html