В PHP у меня есть такой массив:
$BulkArray[$i]
Этот массив питается большим количеством чисел (например, 1 => 100, 2 => 300, 3 => 100 и т.д.). Теперь я хочу найти во всем диапазоне чисел, наибольшую последовательность числа, равного или меньше 500. Я хочу написать число преемственности.
например, у меня есть массив
1 => 100, 2 => 300, 3 => 100,
4 => 50, 5 => 50, 6 => 50, 7 => 50, 8 => 50,
9 => 500, 10 => 200, 11 => 100
как вы можете видеть, число 1,2 и 3 вместе 500. Таким образом, это первая последовательность.
2,3,4,5 также составляют 500 вместе. (Эта последовательность (4) больше, чем первая последовательность (3))
И так далее, вы получите наивысшую последовательность: 3,4,5,6,7,8 (последовательность с 6 номерами), которая составляет 350 (но ниже 500 м, как мы ее искали)
Теперь, как я могу писать с помощью массива: $BulkArray[$i]
, что самая высокая последовательность - 6?
Потому что 6 - наивысшая последовательность, найденная во всем массиве за 500!
(Это для категоризации конкретных Карпов)
Нажмите здесь или здесь, вы можете увидеть
<?php //lets call your $BulkArray = $values;
$values=array( 1 => 100, 2 => 300, 3 => 100,
4 => 50, 5 => 50, 6 => 50, 7 => 50, 8 => 50,
9 => 500, 10 => 200, 11 => 100 );
$sum=0; // to sum up until 500
$Vals500=array(); // array to store index with <= 500
$i=0; // index for new aaray that will store keys that made up <= 500
$key1=1; //value to iterate the array defined above
//print_r($values); echo '<br/>';
for($key=1; $key <= count($values); $key++){
$sum = $sum + $values[$key]; // get sum of values
if($sum <= 500){ $Vals500[$i][]=$key; } //append all key of sum ==500
if($sum == 500) { $i++; $key=$key1++; $sum=0; } //check sum then reinitialize values
}
foreach($Vals500 as $val){} //search for second array with many indeces in $Vals500. NB: i fail this place
echo print_r($Vals500);
print 'the highest succession found is '; print_r($Vals500[2]); //
?>
Ответ пользователя "fas M" здесь снова, с небольшим улучшением:
<?php //lets call your $BulkArray = $values;
$values=array( 1 => 100, 2 => 300, 3 => 100,
4 => 50, 5 => 50, 6 => 50, 7 => 50, 8 => 50,
9 => 500, 10 => 200, 11 => 100 );
$sum=0; // to sum up until 500
$Vals500=array(); // array to store index with <= 500
$i=0; // index for new aaray that will store keys that made up <= 500
$key1=1; //value to iterate the array defined above
for($key=1; $key <= count($values); $key++){
$sum = $sum + $values[$key]; // get sum of values
if($sum <= 500){ $Vals500[$i][]=$key; } //append all key of sum ==500
if($sum >= 500) { $i++; $key=$key1++; $sum=0; } //check sum then reintialize
//added bigger equal
}
echo count(max($Vals500)); // read out the biggest succession
?>
Еще раз спасибо fas M!