给定一个整数N(N≥3),两个不同的数字X和Y,任务是找出第三个抽出的数字(第三个数字位于[1,N]范围内)能与给定的两个数字组成一个连续的三联体的最大可能数量。同时,打印三联体。
例子。
输入。 N = 3, X = 2, Y = 3
输出:1
1 2 3
解释。 只有一种方法可以使X和Y的连续系列与
第3个抽出的数字,即1。输入。 N = 5, X = 2, Y = 5
输出。 0
解释。 没有任何方法可以将连续的数字组成一个三联体
,三联体中有2和5。
办法。 要解决这个问题,请遵循以下思路。
这个问题可以通过观察X和Y 之间的绝对差值来解决。根据X和Y之间的差值,有三种情况,解释如下。
观察可能的情况。
考虑N=5的所有输入,X和Y分别被定义为每种情况。
案例1: 当X和Y之间的绝对差值为1 时。
在第一种情况下,如果Min(X, Y)等于1,在其他情况下,当
Max(X, Y)=N时,将会有三种情况。
- 当Min(X, Y)= 时,只有一种可能的情况,让X=2,Y=1.所以,连续数组将={1, 2, 3}。
- 当Max(X, Y) = N时,将只有1种可能的情况,让X = 5, Y = 4.所以,连续数组将= {3, 4, 5}。
- 对于其他的情况。 除上述两种情况外,其余的情况有两种可能的方式组成连续数组。让X=2,Y=3.那么,有两种连续数组的可能{1,2,3}和(2,3,4)。
情况2:当X和Y的绝对差值为2时**。**
将只有一种可能的情况。假设X=5,Y=3,那么只有 4 的出现 才能构成一个连续的数组={3,4,5},其中第三个抽出的数字将是X和Y的平均值。
情况3: 当X和Y的绝对差值大于2 时**:** 没有任何可能的情况可以用X和Y组成一个连续数组。
请按照以下步骤来解决这个问题。
- 获得X和Y之间的绝对差值。
- 如果绝对差值等于2,那么第三个数字将是X和Y的平均值,如案例2所讨论的。
- 如果绝对差值等于1,那么只有在角落的情况下才会有一个可能的连续数组**,** 如案例1 中讨论的那样,其余的情况会有两个连续数组**。**
- 如果绝对差值大于2,那么在这种情况下将没有可能的连续数组。
下面是上述方法的实现。
Python
# Python code to implement the approach
def findTriplet(X,Y,N):
# Array initialized to hold consecutive array numbers
arr = [0,0,0]
# Condition when absolute difference between X and Y is 2
if(abs(X-Y) == 2):
print(1)
# Printing possible number of cases
arr[0] = X
arr[2] = Y
arr[1] = (X + Y)//2
# Printing consecutive array elements
print(arr[0],end=' ')
print(arr[1],end=' ')
print(arr[2])
# Condition when absolute difference between X and Y is 1
elif(abs(X-Y) == 1):
# If one from X and Y is equal to 1
if(X == 1 or Y == 1):
# Printing possible number of cases
print(1)
arr[0] = 1
if(X > Y):
arr[1] = X
else:
arr[1] = Y
arr[2] = arr[1] + 1
# Printing consecutive array elements
print(arr[0],end=' ')
print(arr[1],end=' ')
print(arr[2])
elif(X == N or Y == N):
# Printing possible number of cases
print(1)
if(X > Y):
arr[0] = Y - 1
else:
arr[0] = X - 1
arr[1] = arr[0] + 1
arr[2] = X + Y - arr[1]
# Printing consecutive array elements
print(arr[0],end=' ')
print(arr[1],end=' ')
print(arr[2])
# For cases when neither X and nor Y is not equal to 1 or N.
else:
# Printing possible cases
print(2)
# Values of consecutive numbers for first case
if(X > Y):
arr[0] = Y - 1
else:
arr[0] = X - 1
arr[1] = arr[0] + 1
arr[2] = X + Y - arr[1]
# Printing consecutive array numbers
print(arr[0],end = ' ')
print(arr[1],end = ' ')
print(arr[2])
# Values of consecutive numbers for second case
if(X > Y):
arr[0] = Y
arr[1] = X
arr[2] = X + 1
else:
arr[0] = X
arr[1] = Y
arr[2] = Y + 1
# Printing consecutive array numbers
print(arr[0],end=' ')
print(arr[1],end=' ')
print(arr[2])
# When difference between X and Y is greater than 2
else:
print(0)
# Driver Code
if __name__ == "__main__":
# Input value of N
N = 3
# input value of X and Y
X = 2
Y = 1
findTriplet(X,Y,N)
# This code is contributed by ajaymakvana.
输出
1
1 2 3
时间复杂度。 O(1)
辅助空间。 O(1)