Pagina 1 din 1
Indexi valorilor din array care fac suma
Scris: Mie Iun 30, 2021
de sterica
Salutare,
am un array cu urmatoarele numere:
si o variabila, care poate contine numere intregi de la 50 pana 750 (750 este suma tuturor numerelor din array), iar valoarea sa fie divizibila cu 50
cum pot insuma numerele din array si sa returnez cheile numerelor implicate in calcul, ma intereseaza doar prima varianta care duce la egalitatea cu variabila 300
Multumesc!
Indexi valorilor din array care fac suma
Scris: Mie Iun 30, 2021
de MarPlo
Salut,
Care este rolul acelei variabile, ce trebuie sa faca (number=300) in acea ecuatie, in calcularea sumei?
In functie de ce anume se stabilesc cheile si suma?
Indexi valorilor din array care fac suma
Scris: Mie Iun 30, 2021
de sterica
Variabila number stochează numărul introdus de user, numărul pe care îl introduce poate fi cuprins între 50 și 750
50 este minimul
750 este suma maxima a tuturor valorilor din array
de asemena numărul pe care îl introduce va fi divizibil cu 50
Sa presupunem ca userul introduce valoarea 400
Trebuie sa returnez cheile arrayului care formează suma de 400, cum ar fi: 100+100+200 sau 200+200.
Ma interesează doar o varianta, varianta pe care o găsește algoritmul prima
Indexi valorilor din array care fac suma
Scris: Joi Iul 01, 2021
de MarPlo
Inceardca codul urmator. La test va afisa un array cu indexi tuturor combinatiilor /permutarilor de valori din array ($arr) care fac acea suma ($sum).
Variabila $first_re contine indexi primei combinatii.
Cod: Selectaţi tot
/**
* gets all possible permutations of $array
* @param array $array
* @param array $permutations
* @return array
*/
function permutations($array, $permutations =[]) {
if( !empty($array) ) {
$result = [];
for( $i = count($array) - 1; $i >= 0; --$i ) {
$newItems = $array;
$newPerms = $permutations;
list($values) = array_splice($newItems, $i, 1);
array_unshift($newPerms, $values);
$result = array_merge($result, permutations($newItems, $newPerms));
}
}
else $result = array($permutations);
return $result;
}
/**
* Returns all possible key combinations of $array with a sum equal $maxSum
* @param array $array
* @param integer $maxSum
* @return array
*/
function combinations($array, $maxSum) {
// get all permutations of the array keys
$permutations = permutations(array_keys($array));
$combinations =[];
// loop all permutations
foreach( $permutations as $keys ) {
// create a container for each permutation to store calculation
$c_keys =[];
$c_sum =0;
// now loop through the permutation keys
foreach( $keys as $key ) {
// if the addition is still between or equal $maxSum
if( ($c_sum + $array[$key]) <= $maxSum ) {
// increment the sum and add key to result
$c_sum += $array[$key];
$c_keys[] = $key;
}
}
if($c_sum < $maxSum) continue;
// to be sure each combination only exists once in the result
// order the keys and use them as array index
sort($c_keys);
$combinations[join($c_keys)] = $c_keys;
// if($c_sum == $maxSum) break; //Uncoment to return just first result
}
// remove the created key-index from array when finished
return array_values($combinations);
}
$arr =[50, 100, 100, 100, 200, 200];
$sum = 400;
$keys = combinations($arr, $sum);
$first_re = $keys[0]; // keys of the first result
// Output array with results
echo '<pre>';
var_export($keys);
Indexi valorilor din array care fac suma
Scris: Sâm Iul 03, 2021
de sterica
Mulțumesc mult marplo, este ceea ce îmi trebuie