📜  两个系列的第一个碰撞点

📅  最后修改于: 2021-04-25 01:03:55             🧑  作者: Mango

给定五个数字a,b,c,d和n(其中a,b,c,d,n> 0)。这些值代表两个系列的n个项。由这四个数组成的两个序列是b,b + a,b + 2a….b +(n-1)a和d,d + c,d + 2c,…..d +(n-1)c
当两个系列的任何一个点的总和值变得完全相同时,这两个系列将发生冲突。打印碰撞点。

Example:
Input : a = 20, b = 2, 
        c = 9, d = 19, 
        n = 100
Output: 82
Explanation: 
Series1 = (2, 22, 42, 62, 82, 102...)  
Series2 = (28, 37, 46, 55, 64, 73, 82, 91..) 
So the first collision point is 82.   

天真的方法是在两个不同的数组中计算两个序列,然后通过运行两个嵌套循环来检查每个元素是否发生碰撞

时间复杂度:O(n * n)
辅助空间:O(n)

解决上述问题的有效方法是:

*生成第一个系列的所有元素。令当前元素为x。
*如果x也是第二系列的元素,则应满足以下条件。
…..a)x应大于或等于第二个序列的第一个元素。
…..a)x和第一个元素之间的差异应被c整除。
*如果满足上述条件,则第i个值是所需的汇合点。

下面是上述问题的实现:

C++
// CPP program to calculate the colliding
// point of two series
#include
using namespace std;
  
  
void point(int a, int b, int c, int d, int n)
{
    int x , flag = 0;
  
    // Iterating through n terms of the 
    // first series
    for (int i = 0; i < n; i++)
    {
          
        // x is i-th term of first series
        x = b + i * a;     
          
        // d is first element of second
        // series and c is common difference
        // for second series.
        if ((x - d) % c == 0 and x - d >= 0)
        {
            cout << x << endl ;
            flag = 1;
            break;
        }
      
    }
  
    // If no term of first series is found     
    if(flag == 0)
    {
            cout << "No collision point" << endl;
    }
  
      
} 
      
  
// Driver function
int main()
{
    int a = 20 ;
    int b = 2 ;
    int c = 9;
    int d = 19;
    int n = 20;
    point(a, b, c, d, n);
    return 0;
}
  
// This code is contributed by  'saloni1297'.


Java
// Java program to calculate the colliding
// point of two series
import java.io.*;
  
class GFG 
{
    static void point(int a, int b, int c, int d, int n)
    {
        int x , flag = 0;
  
        // Iterating through n terms of the 
        // first series
        for (int i = 0; i < n; i++)
        {
              
            // x is i-th term of first series
            x = b + i * a; 
              
            // d is first element of second
            // series and c is common difference
            // for second series.
            if ((x - d) % c == 0 && x - d >= 0)
            {
                System.out.println( x ) ;
                flag = 1;
                break;
            }
          
        }
      
        // If no term of first series is found 
        if(flag == 0)
        {
            System.out.println ("No collision point");
        }
      
          
    } 
          
      
    // Driver function
    public static void main (String[] args) 
    {
        int a = 20 ;
        int b = 2 ;
        int c = 9;
        int d = 19;
        int n = 20;
        point(a, b, c, d, n);   
      
    }
}
// This code is contributed by vt_m


Python
# Function to calculate the colliding point
# of two series
def point(a, b, c, d, n):
  
    # Iterating through n terms of the 
    # first series
    for i in range(n):
          
        # x is i-th term of first series
        x = b + i*a     
          
        # d is first element of second
        # series and c is common difference
        # for second series.
        if (x-d)%c == 0 and x-d >= 0:
            print x 
            return
  
    # If no term of first series is found      
    else:
        print "No collision point"    
     
  
# Driver code
a = 20
b = 2
c = 9
d = 19
n = 20
point(a, b, c, d, n)


C#
// C# program to calculate the colliding
// point of two series
using System;
  
class GFG {
      
    static void point(int a, int b, int c,
                             int d, int n)
    {
        int x, flag = 0;
  
        // Iterating through n terms of the
        // first series
        for (int i = 0; i < n; i++) {
  
            // x is i-th term of first series
            x = b + i * a;
  
            // d is first element of second
            // series and c is common difference
            // for second series.
            if ((x - d) % c == 0 && x - d >= 0) {
                Console.WriteLine(x);
                flag = 1;
                break;
            }
        }
  
        // If no term of first series is found
        if (flag == 0) {
            Console.WriteLine("No collision point");
        }
    }
  
    // Driver function
    public static void Main()
    {
        int a = 20;
        int b = 2;
        int c = 9;
        int d = 19;
        int n = 20;
        point(a, b, c, d, n);
    }
}
  
// This code is contributed by vt_m


PHP
= 0)
        {
            echo $x;
            $flag = 1;
            break;
        }
      
    }
  
    // If no term of first 
    // series is found 
    if($flag == 0)
    {
            echo "No collision po$";
    }
  
      
} 
      
    // Driver Code
    $a = 20 ;
    $b = 2 ;
    $c = 9;
    $d = 19;
    $n = 20;
    point($a, $b, $c, $d, $n);
  
// This code is contributed by anuj_67.
?>


输出 :

82

时间复杂度:O(n)