Python3程序检查是否所有数组元素都可以通过旋转数字转换为普罗尼克数
给定一个大小为N的数组arr[] ,任务是检查是否可以通过任意次数旋转数组元素的数字来将所有数组元素转换为普罗尼克数。
例子:
Input: {321, 402, 246, 299}
Output: True
Explanation:
arr[0] → Right rotation once modifies arr[0] to 132 (= 11 × 12).
arr[1] → Right rotation once modifies arr[0] to 240 (= 15 × 16).
arr[2] → Right rotation twice modifies arr[2] to 462 (= 21 × 22).
arr[3] → Right rotation twice modifies arr[3] to 992 (= 31 × 32).
Input: {433, 653, 402, 186}
Output: False
解决方法:按照以下步骤解决问题:
- 遍历数组并检查每个数组元素,是否可以将其转换为普罗尼克数。
- 对于每个数组元素,应用所有可能的旋转并在每次旋转后检查生成的数字是否为 pronic。
- 如果无法将任何数组元素转换为普罗尼克数,请打印“False” 。
- 否则,打印“True” 。
下面是上述方法的实现:
Python3
# Python implementation of
# the above approach
# Function to check if a number
# is a pronic number or not
def isPronic(n):
for i in range(int(n**(1 / 2)) + 1):
if i * (i + 1) == n:
return True
return False
# Function to check if any permutation
# of n is a pronic number or not
def checkRot(n):
temp = str(n)
for i in range(len(temp)):
if isPronic(int(temp)):
return True
temp = temp[1:]+temp[0]
return False
# Function to check if all array
# elements can be converted to
# a pronic number or not
def check(arr):
# Traverse the array
for i in arr:
# If current element
# cannot be converted
# to a pronic number
if not checkRot(i):
return False
return True
# Driver Code
arr = [ 321, 402, 246, 299 ]
print(check(arr))
输出:
True
时间复杂度: O(N 3/2 )
辅助空间: O(1)
有关详细信息,请参阅有关检查所有数组元素是否可以通过旋转数字转换为普罗尼克数的完整文章!