自然數從1到n之間,有多少個數字含有1

2021-06-22 23:39:53 字數 874 閱讀 2102

問題明確而簡單.for迴圈肯定是不好的.

用遞推方法:

定義h(n)=從1到9999.....9999  ( n 個 9)之間含有1的數字的個數.定義f(n)為n位數中含有1的數字的個數.

由定義可知:h(n)=f(1)+f(2)+f(3)+....+f(n);

則f(1)=h(1)=1;

f(2)=10^1+8*h(1).

f(3)=10^2+8*h(2).

f(4)=10^3+8*h(3).

......

意義如下:f(4)是乙個四位數,假如最高位(千位)為1,那麼後面是啥都行,這個數字必然有1了,所以是10^3.

假如最高位不是1,最高位不能是0(不然就成3位數了),所以最高位有8種選擇2,3,4,5,6,7,8,9.這樣一來,低三位中必須含有1,要不然就沒有一了.所以乘上h(3).

下面舉乙個例子,求1到2345之間含有1數字的個數.

2345=h(1)+h(2)+h(3)+h(4)的一部分.

關鍵是h(4)的一部分應該怎麼求.定義p(4,2)表示是四位數並且雖高位小於2的數中含有1的個數.p(4,2)=10^3+p(3,3);看到這裡就應該明白了.p(3,3)表示三位數中最高位小於3的含1數字的個數.

求n個自然數中每個數字出現的次數

問題描述 某次科研調查時得到了n個自然數,每個數均不超過15億 1.5 109 已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,並按照自然數從小到大的順序輸出統計結果。思路 1.用數組裝下所有數,之後利用排序 函式對陣列中的所有元素進行排序 2.將第乙個元素定為哨兵,定義co...

排列組合 從n個自然數中取出r個數的組合

這種題目一般有兩種方法,比較直接的方法就是使用循壞,但是對於這種方法只有r小於等於4時才是可行的,這個時候複雜度是 o n r 可知,這種方法的時間複雜度很高,而且這種迴圈機制嚴重依賴r,通過r來控制迴圈層數,因此這種方法不具有普遍性。最常用的方法就是使用遞迴。在迴圈演算法設計中,每個組合中的資料都...

求 從m個自然數中任取n個數的所有組合

問題 編寫乙個遞迴演算法,找出從自然數1,2,3,m中任取n個數的所有組合。例如 m 5,n 3時,所有組合為543,542,541,532,531,521,432,431,421,321。方法1 設這m個自然數存放在整數陣列a k 中,a i 存放i 1 0 i n 1 可採用遞迴演算法,例如,m...