【PHP】算法进阶,获取给定值的最优组合:虚拟币抵扣问题解决方案
<?php
$result_flb = array(
array('id'=>'1','currency' => '15','cash' => '2',),
array('id'=>'2','currency' => '20','cash' => '2'),
array('id'=> '3','currency' => '10','cash' => '2'),
array('id'=> '4','currency' => '6','cash' => '10'),
);
$arr = array_column($result_flb,'currency');
//循环取出,转化成floor类型
foreach($arr as &$v){
$v = floor($v);
}
unset($v);
$max = 4;
$re = digui($arr);
foreach ($re as $key => $value) {
if ($key <= $max) {
isset($result) || $result = [$key, $value];
if ($key > $result[0]) {
$result = [$key, $value];
}
}
}
isset($result) || $result = [0, []];
$arr_yes = array(); //满足条件的集合
$arr_no = array(); //不满足条件的集合
foreach($result_flb as $k=>$v){
if(in_array(floor($v['currency']),$result['1'])){
$arr_yes[$k]=$v;
$arr_yes[$k]['bili']=100;
}else{
$arr_no[$k]=$v;
}
}
$arr_no = array_sort($arr_no);
$fine_money = $result[0];
if(empty($arr_no)){
$finally = $fine_money;
}else{
$bilie = $arr_no['currency'] / $arr_no['cash'];
$bilie_money =intval(($max-$fine_money)/$bilie * pow(10, 2))/ pow(10, 2) ;// 舍去小数点取整: 不使用四舍五入
$finally = $fine_money + $bilie_money;
$arr_no['bili'] = $bilie*100;
}
$he_no[0] = $arr_no;
$res = array_merge_recursive($arr_yes,$he_no);
echo $finally; //最终结果
function array_sort($arr_no){
// 装入临时数组
$cur = array();
foreach ($arr_no as $key => $value) {
$cur[$value['id']] = $value['currency'];
}
// 临时数组排序
sort($cur);
// 原数组排序、取值
$result = array();
foreach ($arr_no as $key => $value) {
switch ($value['currency']) {
case $cur[0]:
$result = $value;
break;
}
}
return $result;
}
function digui($arr, $re = []) {
if (count($arr) == 0) {
return [];
}
if (count($arr) == 1) {
$re[$arr[0]] = [$arr[0]];
}
if (count($arr) >= 2) {
$x = array_shift($arr);
$re[$x] = [$x];
for ($b = 0; $b < count($arr); $b++) {
$result = $x + $arr[$b];
$re[$result] = [$x, $arr[$b]];
}
$re = digui($arr, $re);
foreach ($re as $k => $v) {
if (!in_array($arr[0], $v)) {
array_unshift($v, $arr[0]);
$re[$arr[0] + $k] = $v;
}
}
}
return $re;
}
?>
【PHP】算法进阶,获取给定值的最优组合:虚拟币抵扣问题解决方案的更多相关文章
- 【PHP】算法: 获取满足给定值的最优组合
PHP 获取给定值的最优组合 方法 - (蓝洛提供,博客地址: www.zhaorui.info) <?php ini_set('error_reporting','E_ALL^E_NOTI ...
- C#算法实现获取树的高度
我们知道,树类型作为数据结构中的重要一员,树的很多实现都是来自递归.本文想要实现的就是在桌面客户端项目开发中,经常用到的树结构(.Net平台下有个控件为TreeView).事实上,我们可能因业务需求自 ...
- 国产芯片任重道远 国科微SSD主控芯片的“追赶之路”(不能只提供一颗芯片,而是要将芯片、国密算法、固件Firmware、BIOS和操作系统紧密联系在一起,变成完整解决方案交给行业用户,才能真正体现自身的价值)
集微网消息,“中国芯”战略之路道阻且长,踏入这个赛道的攻坚者们需要十年如一日的技术突破,需要集合产业势能,共同协作,方能建立中国核心技术真正的竞争力. 国产化之路任重道远,SSD芯片初见成效 信息时代 ...
- 算法进阶之Leetcode刷题记录
目录 引言 题目 1.两数之和 题目 解题笔记 7.反转整数 题目 解题笔记 9.回文数 题目 解题笔记 13.罗马数字转整数 题目 解题笔记 14.最长公共前缀 题目 解题笔记 20.有效的括号 题 ...
- 获取所有组合算法、获取全排列算法(java)
转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5574516.html 受到ACM1015的影响,个人感觉,有必要对统计学上的 全组合和全排列 进行一个简单的总结 ...
- java 雪花算法实现获取分布式id
import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...
- [算法进阶0x10]基本数据结构C作业总结
t1-Supermarket 超市利润 题目大意 给定n个商品,每个商品有利润pi和过期时间di.每天只能卖一个商品,过期商品不能卖.求如何安排每天卖的商品可以使收益最大. 分析 一开始打了一个复杂度 ...
- CNN:人工智能之神经网络算法进阶优化,六种不同优化算法实现手写数字识别逐步提高,应用案例自动驾驶之捕捉并识别周围车牌号—Jason niu
import mnist_loader from network3 import Network from network3 import ConvPoolLayer, FullyConnectedL ...
- NN:神经网络算法进阶优化法,进一步提高手写数字识别的准确率—Jason niu
上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非常好准确率都在90%以上,本文章进一步探讨对神经网络算法优化,进一步提高准确率,通过测试发现,准确率提高了很多. 首先,改 ...
随机推荐
- CenOS6.5下源码安装vim-7.4
1.[下载] vim-7.4下载地址: ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 2.[解压] tar jxvf vim-7.4.tar.bz2 之 ...
- AM335X can驱动移植
驱动选择 make menuconfig [*] Networking support ---> <*> CAN bus subsystem support ---> --- ...
- ubuntu 16.04 上opengl 的安装以及例子程序编译执行
因为最近在移植 Qt5.7 + opengl , 遇到了难以越过的山峰,没有办法,试着在 ubuntu 16.04上将 opengl 配置以下,记录: 安装相关的库: sudo apt-get ins ...
- [uart]3.tty驱动分析
转自:http://www.wowotech.net/linux_kenrel/183.html 目录: 1 首先分析设备驱动的注册 1.1 uart_register_driver分析 1.2 tt ...
- Linux 进程间通信(posix消息队列 简单)实例
Linux 进程间通信(posix消息队列 简单)实例 详情见: http://www.linuxidc.com/Linux/2011-10/44828.htm 编译: gcc -o consumer ...
- pthread_setschedparam
#include <stdlib.h> #include <pthread.h> #include <stdio.h> #include <sched.h&g ...
- linux下tree命令详解
linux下tree命令详解linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装:sudo apt-get install tree .文件很小,只有31K,但功能可强大了 ...
- C语言实现商品销售系统
商品销售系统 #include<stdio.h> //头文件 #include<string.h> //头文件 #include<stdlib.h> //头文件 # ...
- 老生常谈:vim 配置
1.自动补全 插件名字:NeoComplCache 下载地址:http://www.vim.org/scripts/script.php?script_id=2620 配置:把文件直接复制到vimfi ...
- ★ Maven的坑,tomcat插件6 不能与jdk8一起使用
Maven 集成Tomcat7插件 maven WEB项目启动没问题访问页面就报错:org.apache.jasper.JasperException: Unable to compile class ...