检查数字的任何排列是否可以被 3 整除并且在 Python 中是回文的

假设,我们有一个很大的正整数 N。我们必须检查是否可以从它的数字排列中找出一个数字;使得置换等于它的逆形式,即它的回文,并且也可以被 3 整除。

例如,假设我们有数字 132213。如果我们检查数字的排列,我们得到 123321,它是一个回文,也可以被 3 整除。我们必须检查输入的数字是否有任何可能的排列满足以上条件。

因此,如果输入是这样的:input_num = 132213,那么输出将是“一个或多个排列是回文并且可以被三整除”。

为了解决这个问题,我们将按照以下步骤操作 -

  • digit_array := 大小为 10 的新列表,初始化为 0

  • 输入总和:= 0

  • 当 input_num 不为零时,请执行

    • input_sum := input_sum + (input_num mod 10)

    • digit_array[input_num mod 10] := digit_array[input_num mod 10] + 1

    • input_num := (input_num / 10) 的底值

  • 如果 input_sum mod 3 不等于 0,则

    • 返回错误

  • index_odd := 0

  • 对于 0 到 9 范围内的 i,请执行

    • index_odd := index_odd + 1

    • 如果 digit_array[i] mod 2 不等于 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

猜你喜欢