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] >= 右邊界,則
- 跳出迴圈
- 對於數字列表中的每個 k,執行:
- 刪除數字列表中的重複值並排序
- 計數 := 0
- 對於數字列表中的每個 temp2,執行:
- 如果 temp2 >= 左邊界 且 temp2 <= 右邊界,則
- 計數 := 計數 + 1
- 如果 temp2 >= 左邊界 且 temp2 <= 右邊界,則
- 返回計數
示例
讓我們來看下面的實現,以便更好地理解:
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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP