Codice PHP:
$array = [[1,2,3],[2,2],[4,5,2,3],[1,4,2],[3,6,5]]; //20 max unico
//$array è un array multidimensionale con tutti gli array
//$somma un array passato per riferimento dove andranno tutti i numeri più grandi
function SommaUnicaMassima(array $array, array &$somma){
foreach($array as $arr){
//trova il valore massimo
$max = max($arr);
//se il valore non è già stato aggiunto lo aggiunge
if(!in_array($max,$somma))
$somma[] = $max;
else
//se il valore è già stato aggiunto lo toglie dall'array e prova a trovarne un altro in maniera ricorsiva
SommaUnicaMassima([array_diff($arr,[$max])],$somma);
}
}
$somma = [];
SommaUnicaMassima($array, $somma);
//alla fine con array_sum() si sommano tutti i valori di $somma
echo array_sum($somma);
Ultima modifica di RoTeam; 10-08-2014 a 15:13
Provato con gli array
$array = [[30,29],[30,23,21,20]];
da comunque 53 invece che 59
Grazie per la disponibilità innanzitutto!
No, in realtà io ho bisogno di trovare la combinazione che, dati due array, mi restituisca la somma più alta fra i due prendendo UNO E UN SOLO valore per ogni array, senza possibilità di usare un valore due volte.
Se ho per esempio
a= 30
b= 29
c= 20
d= 10
e= 5
e ho
array1 (a, b, c)
array2 (a, c, d)
Il codice dovrebbe essere in grado di prendere dall'array 1 il valore B (cioè 29), e dall'array 2 il valore A (cioè 30), perchè questa è la combinazione che restituisce il valore massimo della somma array1+array2!
Prova il mio ultimo esperimento
Codice PHP:
$array = [[30,29],[30,23,21,20]];
function SommaUnicaMassima(array $array){
$max = $vals = [];
//ciclo $array per avere un unico array
foreach($array as $arr)
if(is_array($arr))
$vals = array_merge($vals,$arr);
//trovo tanti valori massimi quanti il numero degli array
while(count($max)<count($array) && count($vals)>0)
{
//trovo il valore massimo
$m = max($vals);
//lo aggiungo
$max[] = $m;
//lo rimuovo
$vals = array_diff($vals,[$m]);
}
//ritorno con la somma dei valori
return array_sum($max);
}
echo SommaUnicaMassima($array); //59
Edit: funziona a metà per ora non si basa su un singolo elemento per array, vabbè riprovo dopo semmai, vedi di completarlo te...
Ultima modifica di RoTeam; 10-08-2014 a 15:59