Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 寻找两个序列的连接点 我们考虑一个数字序列,其中一个数字后面跟着同一个数字加上它的数字之和。 例如,34后面跟着41,因为41=34+3+4本身后面跟着46=41+4+1 顺序是3441465667_Javascript_Algorithm_Math_Sequence - Fatal编程技术网

Javascript 寻找两个序列的连接点 我们考虑一个数字序列,其中一个数字后面跟着同一个数字加上它的数字之和。 例如,34后面跟着41,因为41=34+3+4本身后面跟着46=41+4+1 顺序是3441465667

Javascript 寻找两个序列的连接点 我们考虑一个数字序列,其中一个数字后面跟着同一个数字加上它的数字之和。 例如,34后面跟着41,因为41=34+3+4本身后面跟着46=41+4+1 顺序是3441465667,javascript,algorithm,math,sequence,Javascript,Algorithm,Math,Sequence,从不同数字开始的两个序列可以在给定点处连接,例如,从471开始的序列和从480开始的序列共享数字519 实现函数,该函数获取两个序列的起点,然后返回这些序列的连接点 我的答案是: function computeJoinPoint(s1, s2) { const digitSum = num => String(num).split('').reduce((a, b) => parseInt(a) + parseInt(b)) while (s1 !== s2) { s

从不同数字开始的两个序列可以在给定点处连接,例如,从471开始的序列和从480开始的序列共享数字519

实现函数,该函数获取两个序列的起点,然后返回这些序列的连接点

我的答案是:

function computeJoinPoint(s1, s2) {
  const digitSum = num => String(num).split('').reduce((a, b) => parseInt(a) + parseInt(b))
  while (s1 !== s2) {
   s1 += digitSum(s1)
   s2 += digitSum(s2)
  }
  return s1
}

我用args 471、480测试了我的解决方案,它成功了,但是,其中一个测试用例说args是57、78,程序期望一些连接点,但我的实现没有给出任何解决方案

问题中给出的约束条件如下:

给定的序列总是连接的 0<连接点<20000000 0我的实现有什么问题吗?是否有一种数学方法来确定从57、78开始的序列是否会在某个点收敛?

在代码中,您假设两个序列将在同一索引处连接

解决此问题的一种方法是记住每个访问过的号码:

函数computeJoinPoints1、s2{ 控制台日志1、s2; const digitSum=num=>{ 返回Stringnum.split.reducea,b=>parseInta+parseIntb,0; } 访问的常量={}; 让maxIterations=1000;//这样,如果您尝试一些奇怪的操作,浏览器就不会挂起 而s1!==s2{ 如果!maxIterations-{ 抛出新的错误“放弃”; } s1+=数字量s1; s2+=数字量s2; 控制台日志1、s2; 如果访问[s1]| |访问[s2]{ 回访[s1]| |回访[s2]; } 访问[s1]=s1; 访问[s2]=s2; } 返回s1; }
console.log'joinpoint:',computeJoinPoint57,78 在代码中,假设两个序列将在同一索引处连接

解决此问题的一种方法是记住每个访问过的号码:

函数computeJoinPoints1、s2{ 控制台日志1、s2; const digitSum=num=>{ 返回Stringnum.split.reducea,b=>parseInta+parseIntb,0; } 访问的常量={}; 让maxIterations=1000;//这样,如果您尝试一些奇怪的操作,浏览器就不会挂起 而s1!==s2{ 如果!maxIterations-{ 抛出新的错误“放弃”; } s1+=数字量s1; s2+=数字量s2; 控制台日志1、s2; 如果访问[s1]| |访问[s2]{ 回访[s1]| |回访[s2]; } 访问[s1]=s1; 访问[s2]=s2; } 返回s1; } console.log'joinpoint:',computeJoinPoint57,78 //我不允许发表评论,所以我将尝试在这里回答Steven关于趋同的问题 // 1. 如果两个数字都能被9整除,则有一个接合点9,27->36 // 2. 否则,如果只有一个数可被9整除,则不存在连接点6,9->? // 3. 否则,如果数字的3模等于4,7->107,或 //它们的模量与3之和为3,如4,5->620中所示,有一个接合点 // 4. 在所有其他情况下,没有连接点 //在这两种情况下,即57、78和471480,数字都可以被3整除,并且没有一个可以被9整除 //所以他们都趋同了 //对于情况1,很容易找到接合点,它是maxa,b+它的数字之和 //对于案例3,我不知道连接点来自何处 //存在针对不同a、b值重复的接合点:107、109、111、214、620等,但没有明显的模式 常量序列收敛=a,b=>{ 常数[a3,a9,b3,b9]=[a%3,a%9,b%3,b%9]; 返回a9==0&&b9==0 | a9*b9!==0&&a3==b3 | a3+b3==3; } console.LogSequencesConverge 57、78; console.LogSequencesConverge471480 //我不允许发表评论,所以我将尝试在这里回答Steven关于趋同的问题 // 1. 如果两个数字都能被9整除,则有一个接合点9,27->36 // 2. 否则,如果只有一个数可被9整除,则不存在连接点6,9->? // 3. 否则,如果数字的3模等于4,7->107,或 //它们的模量与3之和为3,如4,5->620中所示,有一个接合点 // 4. 在所有其他情况下,没有连接点 //在这两种情况下,即57、78和471480,数字都可以被3整除,并且没有一个可以被9整除 //所以他们都趋同了 //对于情况1,很容易找到接合点,它是maxa,b+它的数字之和 //对于案例3,我不知道连接点来自何处 //存在针对不同a、b值重复的接合点:107、109、111、214、620等,但没有明显的模式 常量序列收敛=a,b=>{ 常数[a3,a9,b3,b9]=[a%3,a%9,b%3,b%9]; 返回a9==0&&b9==0 | a9*b9!==0&&a3==b3 | a3+b3==3; } console.LogSequencesConverge 57、78;
console.LogSequencesConverge471480;谢谢你,我的朋友!很好的解释谢谢你,我的朋友!s
好啊Explanation@StevenArias小心,reduce有一个bug,一位数没有被解析为int。我通过将0设置为初始减少值来修复它。当我试图运行pank的示例时发现了它。@StevenArias小心,reduce有一个错误,一位数不能解析为int。我通过将0设置为初始减少值来修复它。当我尝试运行pank的示例时发现了它。