Я разработал рекурсивное решение ниже. Функция возвращает одну букву, а затем вызывает себя, чтобы вернуть следующую букву. Он делает это до тех пор, пока число, переданное функции, не будет 0
, что означает, что все буквы найдены, и мы можем выйти из рекурсии.
var romanMatrix = [
[1000, 'M'],
[900, 'CM'],
[500, 'D'],
[400, 'CD'],
[100, 'C'],
[90, 'XC'],
[50, 'L'],
[40, 'XL'],
[10, 'X'],
[9, 'IX'],
[5, 'V'],
[4, 'IV'],
[1, 'I']
];
function convertToRoman(num) {
if (num === 0) {
return '';
}
for (var i = 0; i < romanMatrix.length; i++) {
if (num >= romanMatrix[i][0]) {
return romanMatrix[i][1] + convertToRoman(num - romanMatrix[i][0]);
}
}
}
(Ниже приведены мои предположения, пожалуйста, дайте мне знать, если я прав / неправ.)
Контекст пузыря: Кредитор берет кредит. Кредитор выплачивает кредит. На полпути через выплату берет еще один кредит.
Технический пузырь: Массив содержит сальдо в порядке убывания. Если значение увеличивается (по сравнению с последним), оно считается пузырем.
Вот как вы можете определить пузырь в массиве:
<?php
/**
* An array in DESCENDING order (OP)
*/
$array = [
61029,
64698,
67355,
70000, // has bubble
43651,
48346,
52029, // has bubble
48029,
48698,
49355,
50000,
];
/**
* An array in ASCENDING order
*/
$asc_array = [
10,
20,
30,
40,
50,
45, //Has bubble
55
];
/**
* Given an array, identify a "bubble",
* aka. an increasing value in an otherwise decreasing value array.
* Returns the $key where the bubble resides.
*/
function identifyBubble($array){
foreach($array as $id => $item){
if(!$id){
continue;
}
if(!$array[$id+1]){
continue;
}
if(($array[$id-1] < $array[$id]) && ($array[$id] > $array[$id+1])){
return $id;
}
}
return false;
}
/**
* If an array is in ASCENDING order, switch it around,
* otherwise return the array as is.
*/
function makeArrayDescending($array){
if(reset($array) < end($array)){
return array_values(array_reverse($array));
}
return $array;
}
var_dump(identifyBubble($array));
var_dump(makeArrayDescending($asc_array));
var_dump(identifyBubble(makeArrayDescending($asc_array)));
Вывод
int(3)
array(7) {
[0]=>
int(55)
[1]=>
int(45)
[2]=>
int(50)
[3]=>
int(40)
[4]=>
int(30)
[5]=>
int(20)
[6]=>
int(10)
}
int(2)
Предостережения
[119 ] Это будет работать только для связанных массивов (массивов с порядковыми номерами индексов). Это будет работать только на одномерных массивах.