检查数字的任何排列是否可以被 3 整除并且在 Python 中是回文的
假设,我们有一个很大的正整数N。我们必须检查是否可以从它的数字排列中找出一个数字;使得置换等于它的逆形式,即它的回文,并且也可以被3整除。
例如,假设我们有数字132213。如果我们检查数字的排列,我们得到123321,它是一个回文,也可以被3整除。我们必须检查输入的数字是否有任何可能的排列满足以上条件。
因此,如果输入是这样的:input_num=132213,那么输出将是“一个或多个排列是回文并且可以被三整除”。
为了解决这个问题,我们将按照以下步骤操作-
digit_array:=大小为10的新列表,初始化为0
输入总和:=0
当input_num不为零时,请执行
input_sum:=input_sum+(input_nummod10)
digit_array[input_nummod10]:=digit_array[input_nummod10]+1
input_num:=(input_num/10)的底值
如果input_summod3不等于0,则
返回错误
index_odd:=0
对于0到9范围内的i,请执行
index_odd:=index_odd+1
如果digit_array[i]mod2不等于0,则
如果index_odd>1,则
return"没有排列是回文并且可以被三整除"
否则,
return"一个或多个排列是回文并且可以被三整除"
让我们看看以下实现以获得更好的理解-
示例
def solve(input_num): digit_array = [0] * 10 input_sum = 0 while (input_num) : input_sum += input_num % 10 digit_array[input_num % 10] += 1 input_num //=10 if (input_sum % 3 != 0): return False index_odd = 0 for i in range(10) : if (digit_array[i] % 2 != 0): index_odd += 1 if (index_odd > 1): return "No permutation is a palindrome and is divisible by three" else: return "One or more permutation is a palindrome and is divisible by three" input_num = 132213 print(solve(input_num))
输入
132213输出结果
One or more permutation is a palindrome and is divisible by three