AlexLearne Ответов: 2

Алгоритм длины цепи палиндрома


Я пытаюсь написать функцию, которая подсчитывает, сколько раз потребовалось, чтобы найти палиндром. Для тех, кто не знаком с этим словом, палиндром - это слово, которое представляет собой слово, фразу или последовательность, которая читается одинаково назад и вперед. Например, "мадам", " Аба " и т. д. В этой функции я хотел бы работать с палиндромными числами. Условия таковы:
1) Если входное число-палиндром, верните 0, так как для создания палиндрома потребовалось 0 шагов.
2) Если число не является палиндромом, мне нужно будет добавить к нему обратный вход и проверить, является ли число палиндромом.
Например:
вход 87
87 + 78 = 165; 165 + 561 = 726; 726 + 627 = 1353; 1353 + 3531 = 4884

4884 - это палиндром, и нам потребовалось 4 шага, чтобы достичь этого, поэтому выход должен быть 4
CountPalSteps(87) -> 4

Как я могу сосчитать эту цепочку? Чего бы я хотел достичь:
1) Если число не является палиндромом, сделайте его одним, добавив обратное число. Например
palin(123){
123 + 321 = 444
}
444 теперь палиндром, и мне потребовался один шаг, чтобы достичь этого! Итак, выход должен быть 1!
Обратите внимание, мне нужно было бы только использовать дополнение!

Что я уже пробовал:

function palin(arg) {
  var reversed = +arg.toString().split("").reverse().join("");
  if(arg === reversed){ return "The number is palindrome"}
  else {
 var sum = arg + reversed;
    var reversSum = +sum.toString().split("").reverse().join("");
    if(sum !== reversSum){//what should I put in here?}
  }
}

Patrice T

Где ты считаешь ?

AlexLearne

Ну, это задача, посчитать, сколько шагов мне нужно, чтобы найти палиндром. Я знаю, что мне нужно будет создать переменную счетчика, но самое сложное-как получить палиндром?

Patrice T

Может быть, вам следует объяснить, в чем ваша проблема и в чем проблема в вашем коде.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

AlexLearne

Простите, что я вас смутил. Я обновил вопрос, надеюсь, теперь он ясен! Я действительно плохо объясняю задачи программирования!

AlexLearne

Понятно ли, что я пытаюсь сделать?

2 Ответов

Рейтинг:
20

Karthik_Mahalingam

попробовать это

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script>

        var count = 0;
        var final = 0;
        function GetpalinCount(arg) { 
            if (!isPalin(arg)) {
                count++;
                var reversed = arg.toString().split("").reverse().join("");
                var sum = parseInt(arg) + parseInt(reversed);
                GetpalinCount(sum); 
            }
            else {
                final = arg;
            }
        }

        function isPalin(value)
        {
            var reversed = value.toString().split("").reverse().join("");
            return value.toString() === reversed;
        }

        var find = prompt('enter the integer value');
        GetpalinCount(find);
        alert('count= ' + count + '\n' + 'final Value= ' + final);
        

    </script>
</head>
<body> 

</body>
</html>


демонстрация: - JSFiddle[^]


AlexLearne

Спасибо Вам за помощь, я даже думать не мог о рекурсии!

Karthik_Mahalingam

:) добро пожаловать

Рейтинг:
12

Patrice T

Это домашнее задание, цель которого-заставить вас задуматься о том, как решить проблему.
все есть в заявлениях:

Цитата:
1) Если входное число-палиндром, верните 0, так как для создания палиндрома потребовалось 0 шагов.

Ваш
return "The number is palindrome"

не соответствуют инструкции. Это должно быть легко исправить.
Цитата:
2) Если число не является палиндромом, мне нужно будет добавить к нему обратный вход и проверить, является ли число палиндромом.
У вас уже есть sum, вы просто должны проверить, если sum это палиндром. и добавьте 1 к числу шагов.
воспользуйтесь своими знаниями:
Палин(арг)
87 + 78 = 165; 165 + 561 = 726; 726 + 627 = 1353; 1353 + 3531 = 4884
и ты это знаешь:
Палин(4884) => 0
Палин (1353) => 1 потому что = Палин (4884) + 1
Палин(726) => 2 потому что = Палин (1353) + 1
Вы должны быть в состоянии найти решение самостоятельно.


AlexLearne

Спасибо за внимание. Я действительно нашел решение и теперь вижу эту проблему по-другому. Ты действительно заставил меня задуматься! Мне нужен такой наставник, как ты!

Patrice T

Спасибо. Я рад, что вы нашли решение.

Быть наставником отнимает много времени и лучше с прямыми встречами.
Ищите наставника вокруг себя среди ваших учителей или старших людей в компьютерном клубе.