問題:
給定乙個自然數n,計算1,2,3...n中,出現1和2的數量。比如1,2,3...10,一共出現了3次,1,2,3...12,一共出現了7次。
思路:
比如計算54321,可以先計算50000,再計算50001-54321中1和2的個數,而後者又可以看成計算4321中1和2的個數,於是簡化了問題。其中計算50000的時候,可以計算49999中有多少個1和2,也就遞迴轉變成了乙個已知的求解方法,再加上50000所代表的1和2的個數(0個)。
def count_from_number(number):
if number < 10:
if number == 0:
return 0
elif number == 1:
return 1
else:
return 2
number_str = str(number)
first = number_str[0]
left = number_str[1:]
head = first + len(left) * '0'
count = 0
count += count_head(int(head))
if first == '1' or first == '2':
count += (number - int(head))
count += count_from_number(int(left))
return count
// 這個方法計算1000、50000這種以0結尾的數字中1和2的個數
def count_head(number):
number_str = str(number)
first = number_str[0]
count = 0
if first == '1' or first == '2':
count += 1
count += count_from_number(number - 1)
return count
number = 10
print("count 1 or 2 for %d"%number)
print("result: %d"%count_from_number(number))
number = 12
print("count 1 or 2 for %d"%number)
print("result: %d"%count_from_number(number))
number = 122
print("count 1 or 2 for %d"%number)
print("result: %d"%count_from_number(number))
程式設計題3 自然數的計算
問題描述 我們要求找出具有以下性質的數的個數 包含輸入的自然數本身 先輸入乙個自然數n n 1000 然後對此自然數進行如下操作 1.不作任何操作 2.在他左邊加上乙個自然數,但該自然數不能超過原數最高位數字的一半 3.加上數之後,繼續按此規則進行處理,直到不能再加自然數為止 輸入 第一行乙個數t,...
C 語言例項 計算自然數的和
c 語言例項 計算自然數的和 自然數是指表示物體個數的數,即由0開始,0,1,2,3,4 乙個接乙個,組成乙個無窮的集體,即指非負整數。例項 使用 for include intmain printf sum d sum return0 例項 使用 while include intmain pri...
自然數形式系統的實驗2
setq zero lambda s z z setq one lambda s z funcall s z setq two lambda s z funcall s funcall s z setq three lambda s z funcall s funcall s funcall s z...