支票最终金额允许以PHP中的国家可用面额接受

时间:2019-07-17 06:39:05

标签: php

需要使用自定义功能来检查可用面额的金额。 我制作的代码:

$amount = 100;
$notes_aval = array(20,50,100,500,2000);//available currency notes
    $is_allowed = 0; //not allowed
    foreach($notes_aval as $note){
         if (fmod($amount,$note) == 0) {
         $is_allowed = 1;//allowed
          }
       }
echo $is_allowed;

但这并不是在所有情况下都可行。 对于考试:我有面额=数组(20,50); 金额90不允许,但应允许20 * 2 + 50 * 1 = 90

在面额=数组(20,50)的示例中,如果金额1110应该可以接受,而1110 = 20 * 53 + 50 * 1

2 个答案:

答案 0 :(得分:0)

您需要从最大的价值开始兑换,直到您的金额小于最大的价值(例如2000)。然后,用小调(例如500)和小调再次进行。当金额小于最小值(例如20)时,您将无法交换此金额。

所以:

  • 我们从2270开始
  • 我们检查最大的钞票-2000。
  • 现在我们知道我们有2000和270(2270-2000)个休息时间
  • 现在,我们再次检查最大值-200。
  • 所以我们有2000、200和70(270-200)个休息时间
  • 现在最大不可能是50
  • 所以我们有2000、200、50和20(70-50)个休息时间
  • 现在最大的是20,我们有2000、200、50、20,其余的是0
  • 由于其余部分小于最低音,所以我们可以停止检查。

如果rest为0,我们知道我们可以交换;如果rest大于0,则我们不能交换。此外,我们还有可用于交换的笔记列表(2000、200、50、20)。

function checkDenomination($amount){
    $notes = array(2000,500,100,50,20); //it's easier if they are reversed
    $smallestNote = 20;
    $result = [];

    while($amount >= $smallestNote) { //we will repeat until we can exchange
        foreach($notes as $note) { 
            if ($amount >= $note) { //we check for largest value we can exchange
                $result[] = $note;
                $amount -= $note; //as we have hit, we can deduct it from amount;
                break;
            }
        }
    }

    return ($amount > 0) ? false : $result; //return false if we cannot exchange this amount or array with notes we can exchange for full amount
}

var_dump(checkDenomination(100));
var_dump(checkDenomination(23424));
var_dump(checkDenomination(25000));
var_dump(checkDenomination(222));

答案 1 :(得分:-1)

尝试两个模块化部门

function validateCurrency($amount)
{
    $requestdAmount = $amount;
    $valueUnder = 0;
    $notes = array(20, 50,100,500,2000); 
    $is_allowed = 0;
    if(in_array($amount, $notes)){
        return $is_allowed = 1;
    }

    $numOccurance = ceil($amount/$notes[0]);
    $arraySums = [];

    foreach ($notes as $key => $value) {

    for ($i=1; $i <= $numOccurance; $i++) { 
            if($value * $i == $amount) { 
                return $is_allowed = 1;
            }
            $arraySums[$key][] = $value * $i;
        }
    }

    for ($i=0; $i < count($arraySums); $i++) { 
        for ($j=$i+1; $j < count($arraySums); $j++) { 
            foreach ($arraySums[$i] as $key => $value) {
                foreach ($arraySums[$j] as $key2 => $toBeMul) {
                    if($value+$toBeMul == $amount) { 
                        return $is_allowed = 1;
                    }
                }
            }
        }

    }
    return $is_allowed;

}
// Driver Code 
$amount = 40; 
$is_allowed =  validateCurrency($amount); 
echo $is_allowed;
die();

它将起作用