开票算法问题 排列组合算法求助(类似青蛙跳台阶 ,分蛋糕算法)

2. 问题描述?

业务场景用于开票麻烦 需要去计算这个金额 所以搞个程序计算

如何输入总金额,单价,总数量和115000的阀值就可以计算出排列组合的算法如下如

因为一张发票只能开115000金额 不能超过这个金额 算下来需要开4张发票就能把这个510000金额开完
方式很多种 但是要匹配的上数量

总数量不能超过20000 进行分 分出来需要开几张票
当然这个数量肯定是要越节省发票越好 接近115000就行
我下面只是一个例子 组合当然很多种 只要凑齐并且不浪费发票

总之就是节约发票不能浪费 且总金额不超过这个值

排列组合方式N种 但是要节约发票的那种

开票算法问题如总价510000  如何把这个510000分开且金额不超过115000

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
  • 代码

    <?php
    $price = 25.5;
    $number = 20000;
    $max = 115000;
    $num = floor($max / $price);
    $data = [];
    while ($number > 0) {
      $tmpNumber = $number >= $num ? $num : $number;
      $data[] = [
          'price' => $price,
          'number' => $tmpNumber,
          'total' => $tmpNumber * $price
      ];
      $number -= $tmpNumber;
    }
    print_r($data);
  • 结果

    Array
    (
      [0] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [1] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [2] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [3] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [4] => Array
          (
              [price] => 25.5
              [number] => 1964
              [total] => 50082
          )
    )
2年前 评论
y1415181920 (楼主) 2年前
讨论数量: 4

这个不需要什么算法的吧,只要大于可开的就递归新开。

三行代码就搞定了吧!

2年前 评论
y1415181920 (楼主) 2年前
  • 代码

    <?php
    $price = 25.5;
    $number = 20000;
    $max = 115000;
    $num = floor($max / $price);
    $data = [];
    while ($number > 0) {
      $tmpNumber = $number >= $num ? $num : $number;
      $data[] = [
          'price' => $price,
          'number' => $tmpNumber,
          'total' => $tmpNumber * $price
      ];
      $number -= $tmpNumber;
    }
    print_r($data);
  • 结果

    Array
    (
      [0] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [1] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [2] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [3] => Array
          (
              [price] => 25.5
              [number] => 4509
              [total] => 114979.5
          )
    
      [4] => Array
          (
              [price] => 25.5
              [number] => 1964
              [total] => 50082
          )
    )
2年前 评论
y1415181920 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!