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

      問題明確而簡單.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數字的個數.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章