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

โปรแกรมหาจำนวนตัวเลขพิเศษในช่วงที่กำหนดใน Python


สมมติว่าเราได้รับช่วงของตัวเลขจำนวนเต็มและขอให้ค้นหาตัวเลขพิเศษในช่วง จำนวนพิเศษคือตัวเลขที่เป็นจำนวนเต็มบวกที่มีเลขทศนิยมเพียง 1 หลัก ตัวเลขที่มีมากกว่า 1 หลักในการแสดงทศนิยมสามารถเป็นตัวเลขพิเศษได้เช่นกัน หากตัวเลขนั้นหารด้วยจำนวนหลักในการแทนค่าทศนิยมได้ลงตัว และค่าผลหารนั้นเป็นตัวเลขพิเศษ เราคืนค่าจำนวนตัวเลขพิเศษในช่วงที่กำหนด (left_limit, right_limit)

ดังนั้น หากอินพุตเป็นเหมือน left_limit =5, right_limit =30 ผลลัพธ์จะเป็น 13

ตัวเลขพิเศษในช่วงนี้คือ 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24 และ 28

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

  • ถ้า right_limit <10 แล้ว
    • กลับ right_limit - left_limit + 1
  • len_right :=ขนาดของการแสดงสตริงของ (right_limit)
  • number_list :=[0,1,2,3,4,5,6,7,8,9,10,12,14,16,18]
  • สำหรับ j ในช่วง 2 ถึง len_right + 1 ทำ
    • สำหรับแต่ละ k ใน number_list ทำ
      • temp1 :=k * j
      • ถ้าขนาดของการแสดงสตริงของ temp1 เท่ากับ j แล้ว
        • แทรก temp1 ที่ส่วนท้ายของ number_list
      • มิฉะนั้น เมื่อ len(str(temp1)))> j แล้ว
        • ออกมาจากวงจร
      • ถ้า number_list[ขนาดของ number_list - 1]>=right_limit แล้ว
        • ออกมาจากวงจร
  • ลบค่าที่ซ้ำกันออกจาก number_list แล้วจัดเรียง
  • นับ :=0
  • สำหรับแต่ละ temp2 ใน number_list ให้ทำ
    • ถ้า temp2>=left_limit และ temp2 <=right_limit แล้ว
      • นับ :=นับ + 1
  • จำนวนคืนสินค้า

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def strange(left_limit, right_limit):
   if right_limit < 10:
      return right_limit - left_limit + 1
len_right = len(str(right_limit))
number_list = [0,1,2,3,4,5,6,7,8,9,10,12,14,16,18]
for j in range(2, len_right + 1):
for k in number_list:
temp1 = k*j
if len(str(temp1)) == j:
number_list.append(temp1)
elif len(str(temp1)) > j:
break
if number_list[len(number_list)-1] >= right_limit:
break
number_list = list(set(number_list))
count = 0
for temp2 in number_list:
if temp2 >= left_limit and temp2 <= right_limit:
count = count + 1
return count
print(strange(5, 30))

อินพุต

5, 30

ผลลัพธ์

13