Нахождение максимального значения при добавлении числа к заданному N (JavaScript) - PullRequest
0 голосов
/ 28 марта 2020

Я застрял.

Это вопрос:

Write a function that given an integer N, 
returns the maximum possible value obtained by inserting one '5'
digit inside the decimal representation of integer N.

Examples: 1. Given N 268, the function should return 5268. 
2. Given N 670, the function should return 6750.
3. Given N 0, the function should return 50.
4. Given N -999, the function should return -5999. Assume that: N is an integer within the range [-8,000.8,000]​

После нескольких попыток все, что я получил, это базовая c структура.

const insert5 = (n) => {

let numToInsert = 5
let maxValue = ''

let nLength = n.toString().length

for (i = 0; i >= nLength; i++) {

}

}

console.log(insert5(125))

Кто-нибудь может помочь?

Ответы [ 4 ]

1 голос
/ 28 марта 2020

Я написал краткое и элегантное рекурсивное решение этой проблемы.

Сначала у нас есть функция, которая добавляет 5 в позицию числа:

function insert5(value, power){
    let five = 5 * Math.pow(10, power);
    if(value < 0) five *= -1;
    let right = value % Math.pow(10, power);
    let left = (value - right) * 10;
    return (left + five + right);
}

Затем у нас есть функция, которая решает, какая из возможностей является лучшей.

function highestValue(value, power){
    var lastPower = Math.floor(Math.log10(Math.abs(value)) + 1);
    if(power > lastPower) return Number.NEGATIVE_INFINITY;
    return Math.max(insert5(value, power), highestValue(value, power + 1));
} 

Вам просто нужно позвонить highestValue(your_number, 0).

1 голос
/ 28 марта 2020

Можно использовать один подход l oop, где начальное значение определяется знаком и с помощью функции сравнения.

function largest(number) {
    var digits = number.toString(),
        i = +(number < 0),
        compare = number < 0 ? (v => v > 5) : (v => v < 5);

    while (i < digits.length) {
        if (compare(digits[i])) return +(digits.slice(0, i) + '5' + digits.slice(i));
        i++;
    }
    return +(digits + '5');
}

console.log(largest(123456789));  //  5123456789
console.log(largest(987654321));  //  9876554321
console.log(largest(-123456789)); // -1234556789
console.log(largest(-987654321)); // -5987654321
1 голос
/ 28 марта 2020

Для неотрицательных входных данных - найдите сначала di git (слева), который меньше 5. Вставьте 5 перед ним.

Для отрицательных входов - вы знаете, что делать.

0 голосов
/ 28 марта 2020

Для получения требуемого результата вы должны выполнить несколько простых шагов.

  • Разбить число на цифры и пройти слева направо.
  • Проверьте, является ли число положительным или отрицательное значение
  • Если оно положительное, проверьте, когда первое ди git мы встретили, какое значение меньше 5. Если найдено, поставьте перед ним 5.
  • Если отрицательное, проверьте, когда первое ди git мы встретили, какое значение больше 5. Если найдено, поставьте перед ним 5.

function insert5 (n) {
    const arr = n.toString().split('');
    let l = arr.length;
    let isNeg = arr[0] === '-';
    
    if (isNeg) {
    	arr.splice(0, 1);
    }
    
    
    
    for (let i = 0; i < l; i++) {
    	let digit = parseInt(arr[i]);
        
        if (!isNeg) {
            if (digit < 5) {
                arr.splice(i, 0, '5');
                break;
            }
        } else {
            if (digit > 5) {
                arr.splice(i, 0, '5');
                arr.splice(0, 0, '-');
                break;
            }
        }
        
    }
    
    return parseInt(arr.join(''));
}

console.log(insert5(268));
console.log(insert5(670));
console.log(insert5(0));
console.log(insert5(-999));
console.log(insert5(-268));

Примечание: если требуется любой запрос или улучшение, не стесняйтесь комментировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...