程式設計之美變形記 「49」的個數

2021-07-05 13:05:49 字數 1123 閱讀 1754

昨天在杭電poj上看到乙個道題。題目總結出來就是,給定乙個正整數n,求出從1到n(包含n)之間49出現的個數。

舉例:如n=101

則1到101之間101個數中,49出現一次。同時,409,4009(這樣的數字不合法)。看到第一眼就想起來程式設計之美2.4有一道求「1」的個數的題目,這道題其實就是把「1」換成了49。

我第一眼想到的是用49進製,不過仔細考慮一下之後是不合適的。然後想了乙個小時左右沒想出來。雖然說就是變了個形,不過無奈本人智商不夠,所以到了晚上睡覺前也暫時沒有好的思路。

然而早晨一覺醒來,刷牙時腦海裡忽然浮現出了解體思路。說到這裡,真是覺得人應該多睡覺。高二有次數列求和的題,也是午睡的時候忽然想起了解題思路。

具體思路就是,每次處理兩位。第一次處理個位十位,第二次處理十位百位,依此類推。處理之後再分類討論:

我們用三個變數

highnum   lowernum  currentnum
分別表示當前位的高位數字,低位數字和當前位數字

然後就是乙個分類討論

if(currnetnum>

49) ...

......

if(current==

49) ...

......

.if(current<

49) ...

......

..

至於為什麼分類討論,地球人都知道,看了程式設計之美2.4的人也會知道。

至於**實現,我貼乙個自己的。歡迎來拍磚,如果你用iphone6s拍我,我更開心。

#include 

#include

#include

using

namespace

std;

int calc(int num)

highnum=num/(factor*10);

if(index<2)

factor*=10;

index++;

if(index>2)

}cout

<<"count: "

}int main(int argc,char **argv)

程式設計之美 4 9數獨知多少

問題 一共有多少種不同的數獨解答呢?其中有多少種是獨立的解答呢?如果用乙個字串來表示各種數獨,如何保證一一對應的基礎上,讓字串的長度最短?分析 首先要明確問題,獨立的解答到底是什麼?如何定義 獨立 這種關係?如果任意交換數獨的兩個數字,仍然是乙個合法的數獨。那麼我們可以定義 如果兩個數獨解答可以通過...

計算1的個數 程式設計之美

給定乙個十進位制正數n,寫下從1開始到nde所有正整數,然後數一數其中出現所有 1 的個數。n 2 只有乙個1 n 12 只有五個1,1 10,11,12。分析 一,從1開始遍歷到n,將中每乙個書中含有1的個數加起來。方法如下 static int countoneinint int n retur...

《程式設計之美》統計1的個數

今天看了 入門經典 上的一道題,打算來存個統計位數的模板,一般都是用數字dp來做,但統計單個數字可以特殊處理。題目 對1 n統計1的個數。題目簡單,分析可以看 舉個例子 對於乙個數abcde,取百位上的c來計算,假若c是 1 那麼百位上1的個數是由他的高位和低位來決定的。等於ab 100 cde 1...