Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าการเรียงสับเปลี่ยนของตัวเลขใด ๆ หารด้วย 3 ลงตัวและเป็น Palindromic ใน Python


สมมุติว่าเราได้รับจำนวนเต็มบวกขนาดใหญ่ N เราต้องตรวจสอบว่าเราสามารถหาตัวเลขจากการเรียงสับเปลี่ยนหลักของมันได้หรือไม่ เพื่อให้การเรียงสับเปลี่ยนเท่ากับรูปแบบย้อนกลับ นั่นคือ palindrome และหารด้วย 3 ลงตัวด้วย

ตัวอย่างเช่น สมมติว่าเรามีหมายเลข 132213 หากเราตรวจสอบการเรียงสับเปลี่ยนจากหลักของตัวเลข เราจะได้ 123321 ซึ่งเป็นพาลินโดรมและหารด้วย 3 ลงตัว เราต้องตรวจสอบว่าการเรียงสับเปลี่ยนที่เป็นไปได้จากตัวเลขที่ป้อนเข้าไป เป็นไปตามเงื่อนไขข้างต้น

ดังนั้น หากอินพุตมีลักษณะดังนี้:input_num =132213 ผลลัพธ์จะเป็น "การเรียงสับเปลี่ยนตั้งแต่หนึ่งรายการขึ้นไปเป็นพาลินโดรมและหารด้วยสามลงตัว"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • digit_array :=รายการขนาด 10 ใหม่ที่เริ่มต้นด้วย 0s
  • 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 แล้ว
    • คืนค่าเท็จ
  • index_odd :=0
  • สำหรับฉันในช่วง 0 ถึง 9 ทำ
    • ถ้า 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