给定五个数字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)