Oliver Eyton-Williams ee1e8abd87
feat(curriculum): restore seed + solution to Chinese (#40683)
* feat(tools): add seed/solution restore script

* chore(curriculum): remove empty sections' markers

* chore(curriculum): add seed + solution to Chinese

* chore: remove old formatter

* fix: update getChallenges

parse translated challenges separately, without reference to the source

* chore(curriculum): add dashedName to English

* chore(curriculum): add dashedName to Chinese

* refactor: remove unused challenge property 'name'

* fix: relax dashedName requirement

* fix: stray tag

Remove stray `pre` tag from challenge file.

Signed-off-by: nhcarrigan <nhcarrigan@gmail.com>

Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2021-01-12 19:31:00 -07:00

2.5 KiB
Raw Blame History

id, title, challengeType, videoUrl, dashedName
id title challengeType videoUrl dashedName
5900f3a31000cf542c50feb6 问题55Lychrel数字 5 problem-55-lychrel-numbers

--description--

如果我们采取47反向并添加47 + 74 = 121这是回文。并非所有数字都如此迅速地产生回文。例如349 + 943 = 1292,1292 + 2921 = 4213 4213 + 3124 = 7337也就是说349进行了三次迭代以到达回文。虽然还没有人证明这一点但据认为有些数字如196从未产生回文。通过反向和添加过程从不形成回文的数字称为Lychrel数。由于这些数字的理论性质并且出于这个问题的目的我们将假设一个数字是Lychrel直到证明不是这样。另外对于每万个低于一万的数字你将得到i在不到五十次迭代中成为回文或者ii没有一个具有所有存在的计算能力到目前为止已经管理到将它映射到回文结构。事实上10677是第一个在产生回文之前需要超过50次迭代的数字466873159668422486695137866453次迭代28位数。令人惊讶的是有一些回文数字本身就是Lychrel数字;第一个例子是4994.有多少Lychrel数字在num以下2007年4月24日略微修改了措辞以强调Lychrel数的理论性质。

--hints--

countLychrelNumbers(1000)应该返回13。

assert.strictEqual(countLychrelNumbers(1000), 13);

countLychrelNumbers(5000)应该返回76。

assert.strictEqual(countLychrelNumbers(5000), 76);

countLychrelNumbers(10000)应该返回249。

assert.strictEqual(countLychrelNumbers(10000), 249);

你的函数应该计算所有Lychrel数。

assert.strictEqual(countLychrelNumbers(3243), 39);

您的函数应该通过所有测试用例。

assert.strictEqual(countLychrelNumbers(7654), 140);

--seed--

--seed-contents--

function countLychrelNumbers(num) {

  return true;
}

countLychrelNumbers(10000);

--solutions--

const countLychrelNumbers = (size) => {
  const numReverse = (num) => {
    return Number(num.toString().split('').reverse().join(''));
  };
  const isPalin = (num) => {
    if (numReverse(num) === num) {
      return true;
    }
    return false;
  };
  let total = 0;
  for (let i = 1; i < size; i++) {
    let loopCount = 1;
    let sum = i;
    while (loopCount < 50) {
      sum = sum + numReverse(sum);
      if (isPalin(sum)) {
        break;
      } else {
        loopCount++;
      }
    }
    if (loopCount === 50) {
      total++;
    }
  }
  return total;
}