Heim > Backend-Entwicklung > PHP-Tutorial > Bitte helfen Sie mir mit diesem einfachen Algorithmus

Bitte helfen Sie mir mit diesem einfachen Algorithmus

WBOY
Freigeben: 2016-09-19 09:16:25
Original
1033 Leute haben es durchsucht

Der Text ist nicht gut, bitte verbessern Sie ihn
Eine Reihe von Benutzer-IDs

<code>$uids = [1,2,3,5,6,8,9,11,13,25,65];</code>
Nach dem Login kopieren
Nach dem Login kopieren

Jeder Schlüsselwert in diesem Array stellt eine UID dar
Betragsarray

<code>$amounts = [
    1=>12000,
    2=>500,
    3=>11000,
    5=>1000,
    6=>11000,
    8=>12000,
    9=>12000,
    11=>11000,
    13=>12000,
    25=>22000,
    65=>123123
];</code>
Nach dem Login kopieren
Nach dem Login kopieren

Der Schlüsselname dieses Arrays entspricht dem Schlüsselwert des $uid-Arrays.
Durchlaufen Sie das $uids-Array und entnehmen Sie den entsprechenden Betrag $amount.
Wenn der Betrag größer oder gleich 12000 ($boundary) ist, addieren Sie den $amount zum Gesamtbetrag ($totals)
Wenn der Betrag weniger als 12.000 beträgt, führen Sie eine Abwärtsschleife durch, bis die Summe dieser $-Beträge größer oder gleich 12.000 ist. Addieren Sie dann die Summe dieser $-Beträge zum Gesamtbetrag ($totals)
und nehmen Sie bis auf drei Ebenen.
Ermitteln Sie endlich den Wert von $totals.
Mein aktueller Code:

<code><?php
$boundary = 12000;
$uids= [1,2,3,5,6,8,9,11,13,25,65];
$amounts = [
    1=>12000,
    2=>500,
    3=>11000,
    5=>1000,
    6=>11000,
    8=>12000,
    9=>12000,
    11=>11000,
    13=>12000,
    25=>22000,
    65=>123123
];
$totals = 0;
foreach($uids as $k => $uid){
    $amont = $amounts[$uid];
    if($amont >= $boundary){
        $totals += $amont;
    }else{
        $next = get_next($uids ,$k+1 ,$amont);
        if($next && is_array($next)){
            $curKey = $next[0]; //amouts index 3
            $totals+=$next[2];
            //再向下获取一层
            $nextKey = $curKey+1;
            if(!isset($uids[$nextKey])){
                break;
            }
            $nextUid = $uids[$nextKey];
            $nextAmount = $amounts[$nextUid];
            if($nextAmount >= $boundary){
                $totals+=$nextAmount;
            }else{
                $last = get_next($uids ,$nextKey+1 ,$nextAmount);
                if($last && is_array($last)){
                    $totals+=$last[2];
                }
            }
        }
        break; //跳出主循环
    }
}
echo $totals;
exit;

function get_next($uids ,$start ,$prevAmount){
    global $amounts ,$boundary;
    $leaves = array_slice($uids ,$start ,count($uids),true);
    if($leaves){
        foreach($leaves as $k=>$uid){
            $amount = $prevAmount+$amounts[$uid];
            if($amount >= $boundary){
                return [$k ,$uid ,$amount];
                break;
            }else{
                return get_next($uids ,$k+1 ,$amount);
            }
        }
    }
    return 0;
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Erhalten Sie insgesamt $47500

Antwortinhalt:

Der Text ist nicht gut, bitte verbessern Sie ihn
Eine Reihe von Benutzer-IDs

<code>$uids = [1,2,3,5,6,8,9,11,13,25,65];</code>
Nach dem Login kopieren
Nach dem Login kopieren

Jeder Schlüsselwert in diesem Array stellt eine UID dar
Betragsarray

<code>$amounts = [
    1=>12000,
    2=>500,
    3=>11000,
    5=>1000,
    6=>11000,
    8=>12000,
    9=>12000,
    11=>11000,
    13=>12000,
    25=>22000,
    65=>123123
];</code>
Nach dem Login kopieren
Nach dem Login kopieren

Der Schlüsselname dieses Arrays entspricht dem Schlüsselwert des $uid-Arrays.
Durchlaufen Sie das $uids-Array und entnehmen Sie den entsprechenden Betrag $amount.
Wenn der Betrag größer oder gleich 12000 ($boundary) ist, addieren Sie den $amount zum Gesamtbetrag ($totals)
Wenn der Betrag weniger als 12.000 beträgt, führen Sie eine Abwärtsschleife durch, bis die Summe dieser $-Beträge größer oder gleich 12.000 ist. Addieren Sie dann die Summe dieser $-Beträge zum Gesamtbetrag ($totals)
und nehmen Sie bis auf drei Ebenen.
Ermitteln Sie endlich den Wert von $totals.
Mein aktueller Code:

<code><?php
$boundary = 12000;
$uids= [1,2,3,5,6,8,9,11,13,25,65];
$amounts = [
    1=>12000,
    2=>500,
    3=>11000,
    5=>1000,
    6=>11000,
    8=>12000,
    9=>12000,
    11=>11000,
    13=>12000,
    25=>22000,
    65=>123123
];
$totals = 0;
foreach($uids as $k => $uid){
    $amont = $amounts[$uid];
    if($amont >= $boundary){
        $totals += $amont;
    }else{
        $next = get_next($uids ,$k+1 ,$amont);
        if($next && is_array($next)){
            $curKey = $next[0]; //amouts index 3
            $totals+=$next[2];
            //再向下获取一层
            $nextKey = $curKey+1;
            if(!isset($uids[$nextKey])){
                break;
            }
            $nextUid = $uids[$nextKey];
            $nextAmount = $amounts[$nextUid];
            if($nextAmount >= $boundary){
                $totals+=$nextAmount;
            }else{
                $last = get_next($uids ,$nextKey+1 ,$nextAmount);
                if($last && is_array($last)){
                    $totals+=$last[2];
                }
            }
        }
        break; //跳出主循环
    }
}
echo $totals;
exit;

function get_next($uids ,$start ,$prevAmount){
    global $amounts ,$boundary;
    $leaves = array_slice($uids ,$start ,count($uids),true);
    if($leaves){
        foreach($leaves as $k=>$uid){
            $amount = $prevAmount+$amounts[$uid];
            if($amount >= $boundary){
                return [$k ,$uid ,$amount];
                break;
            }else{
                return get_next($uids ,$k+1 ,$amount);
            }
        }
    }
    return 0;
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Erhalten Sie insgesamt $47500

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage