检查数字的任何排列是否能被3整除且是回文数 (Python)


假设我们得到一个很大的正整数N。我们必须检查是否可以从其数字排列中找到一个数字;使得该排列等于其反转形式,即其回文数,并且也能被3整除。

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

因此,如果输入类似于:input_num = 132213,则输出将是“一个或多个排列是回文数且能被三整除”。

为了解决这个问题,我们将遵循以下步骤:

  • digit_array := 一个大小为10的新列表,初始化为0。
  • input_sum := 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,则
    • 返回False
  • index_odd := 0
  • 对于范围0到9中的i,执行以下操作:
    • 如果digit_array[i] mod 2 不等于 0,则
      • index_odd := index_odd + 1
  • 如果index_odd > 1,则
    • 返回“没有排列是回文数且能被三整除”
  • 否则,
    • 返回“一个或多个排列是回文数且能被三整除”

让我们看看下面的实现以更好地理解:

示例

 在线演示

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

更新于:2020年12月30日

浏览量:122

开启您的职业生涯

通过完成课程获得认证

开始学习
广告