Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm ra số lượng các số đặc biệt trong một phạm vi nhất định bằng Python

Giả sử chúng ta được cung cấp một dãy số nguyên và được yêu cầu tìm các số đặc biệt trong dãy đó. Một số đặc biệt là một số là một số nguyên dương chỉ có 1 chữ số trong biểu diễn thập phân của nó. Một số có nhiều hơn 1 chữ số trong biểu diễn thập phân của nó cũng có thể là đặc biệt nếu số đó chia hết cho số chữ số trong biểu diễn thập phân của nó và giá trị thương của nó là một số đặc biệt. Chúng tôi trả về số lượng các số đặc biệt trong phạm vi đã cho (left_limit, right_limit).

Vì vậy, nếu đầu vào là left_limit =5, right_limit =30, thì đầu ra sẽ là 13.

Các số đặc biệt trong phạm vi này là:5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24 và 28.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu right_limit <10, thì
    • trả về right_limit - left_limit + 1
  • len_right:=kích thước biểu diễn chuỗi của (right_limit)
  • number_list:=[0,1,2,3,4,5,6,7,8,9,10,12,14,16,18]
  • đối với j trong phạm vi 2 đến len_right + 1, thực hiện
    • đối với mỗi k trong number_list, thực hiện
      • temp1:=k * j
      • nếu kích thước biểu diễn chuỗi của temp1 giống với j, thì
        • chèn temp1 vào cuối number_list
      • ngược lại khi len (str (temp1))> j, thì
        • ra khỏi vòng lặp
      • nếu number_list [kích thước của number_list - 1]> =right_limit, thì
        • ra khỏi vòng lặp
  • xóa các giá trị trùng lặp khỏi number_list và sắp xếp
  • số lượng:=0
  • đối với mỗi temp2 trong number_list, hãy thực hiện
    • nếu temp2> =left_limit và temp2 <=right_limit, thì
      • count:=count + 1
  • số lượng trả lại

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

5, 30

Đầu ra

13