Python程式:在一個給定範圍內查詢特殊數字的數量


假設我們給定一個整數範圍,並要求找出該範圍內的特殊數字。特殊數字是指十進位制表示中只有一個數字的正整數。十進位制表示中有多個數字的數字也可以是特殊的,如果該數字可以被其十進位制表示中數字的個數整除,並且商本身也是一個特殊數字。我們返回給定範圍 (左邊界, 右邊界) 內特殊數字的數量。

因此,如果輸入類似於左邊界 = 5,右邊界 = 30,則輸出為 13。

此範圍內的特殊數字為:5、6、7、8、9、10、12、14、16、18、20、24 和 28。

為了解決這個問題,我們將遵循以下步驟:

  • 如果右邊界 < 10,則
    • 返回右邊界 - 左邊界 + 1
  • 右邊界長度 := (右邊界) 的字串表示形式的長度
  • 數字列表 := [0,1,2,3,4,5,6,7,8,9,10,12,14,16,18]
  • 對於 j 從 2 到 右邊界長度 + 1 的範圍,執行:
    • 對於數字列表中的每個 k,執行:
      • temp1 := k * j
      • 如果 temp1 的字串表示形式的長度與 j 相同,則
        • 將 temp1 插入數字列表的末尾
      • 否則,當 len(str(temp1)) > j 時,則
        • 跳出迴圈
      • 如果數字列表[數字列表長度 - 1] >= 右邊界,則
        • 跳出迴圈
  • 刪除數字列表中的重複值並排序
  • 計數 := 0
  • 對於數字列表中的每個 temp2,執行:
    • 如果 temp2 >= 左邊界 且 temp2 <= 右邊界,則
      • 計數 := 計數 + 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

更新於: 2021年10月20日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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