檢查數字的任何排列是否能被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

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.