Python|计算如何组成具有给定数字的连续整数的三联体

182 阅读3分钟

给定一个整数N(N≥3),两个不同的数字XY,任务是找出第三个抽出的数字(第三个数字位于[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。

办法。 要解决这个问题,请遵循以下思路。

这个问题可以通过观察XY 之间的绝对差值来解决。根据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)