計算數自然數序列中的1和2

2021-06-26 12:26:19 字數 1498 閱讀 5938

問題:

給定乙個自然數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...