两个序列的交点如何查找

5

我希望您能提供一种函数算法,该算法能够返回两个序列的交点,例如:

seq1=471 seq2=480

然而,

seq1=seq1+(4+7+1) =483

seq1=seq1+(4+8+3) =498

 ....and so on. 

对于seq2,我们做同样的事情

seq2=seq2+(4+8+0) =492

 ....and so on.

我们这样做直到找到连接点,在我们的例子中连接点是519,因此该函数的主要目的是返回519。该函数有两个参数(seq1、seq2),并返回一个整数。

1
seq1和seq2仅限于三位数的整数吗? - VillageTech
2个回答

8

这里有:

int getDigitsSum(int x)
{
    int sum = 0;
    while (x != 0)
    {
        sum += x % 10;
        x /= 10;
    }

    return sum;
}

int findJoinPoint(int seq1, int seq2)
{
    while (seq1 != seq2)
    {
        if (seq1 < seq2)
        {
            if (seq1 == 0)
                return -1; // no chance to join, seq1 is 0

            seq1 += getDigitsSum(seq1);
        }
        else if (seq2 < seq1)
        {
            if (seq2 == 0)
                return -2; // no chance to join, seq2 is 0

            seq2 += getDigitsSum(seq2);
        }
    }

    return seq1;
}

这应该适用于任何seqs的值(包括0和负数)。对于两个seqs都等于0的情况,函数返回0-这似乎是逻辑上正确的。


0
这是另一种解决方案:
def compute_join_point(s_1, s_2):
  
  seq_1 = []
  seq_2 = []

  while True:
    seq_1.append(s_1)
    seq_2.append(s_2)
    if s_1 == s_2:
      return s_1
    s_1 = s_1 + sum(int(digit) for digit in str(s_1))
    s_2 = s_2 + sum(int(digit) for digit in str(s_2))
    if s_1 in seq_2:
      return s_1
    if s_2 in seq_1:
      return s_2

print(compute_join_point(34, 41))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接