C 關於打表法的簡單介紹

2021-09-07 08:41:19 字數 1044 閱讀 7933

給定乙個十進位制正整數n(1<=n<=10000),寫下從1到n的所有整數,然後數一下其**現的數字「1」的個數。

例如當n=2時,寫下1,2.這樣只出現了1個「1」;當n=12時,寫下1,2,3,4,5,6,7,8,9,10,11,12。這樣出現了5個「1」。

有多組輸入,每組輸入佔一行。每一行有乙個數字n。

對於每組輸入,輸出一行,每行乙個正整數,即「1」的個數。212

15如果讓乙個熟悉程式設計的人來寫,這題應該不算難,那這裡就對核心的判斷部分就一句話帶過了

將每乙個小於等於n的數字遍歷過去,每乙個數字進行拆分得到其中的「1」的個數,累加起來即是答案

#include

intmain()

temp/=10

;}sum+

=onenumbers;

}printf

("%d\n"

,sum);}

return0;

}

但是呢,我們發現幾個問題:

無論是100還是200,這兩組資料都需要計算100以內的數字的「1」的個數,而且過程完全相同。

如果我們先輸入1000,然後再輸入200。實際上,200這個資料早就被計算過了,而這個**卻會去重複計算,浪費時間+記憶體+電量。

題目要求的資料範圍不大,只有1-10000個數字,每乙個數字有對應的乙個唯一確定的輸出。

這個時候我們就要學會使用打表法

打一張**,把需要的東西都儲存下來

這裡我們就直接上示例**了:

#include

intmain()

temp/=10

;}sum+

=onenumbers;

f[i]

=sum;

}while

(scanf

("%d"

,&n)

!=eof

)return0;

}

我們可以看到,這個程式輸入輸出僅僅只有3行(其實完全可以只有一行的)而能夠讓我們這麼快的輸入輸出得益於上面這個打表的過程。

打表法簡單舉例

有時候在資料太多的時候且要多次迴圈的時候,可以選擇打表法,程式設計效率大大提高,下面簡單介紹一下打表法 打表法,顧名思義,就是把一些資料列印出來,存放到陣列裡,需要的時候直接呼叫就行,就不必多次迴圈了。例 如果x加上x的各個位數上的數字之和得到y,就說x是y的生成元。給出n 1 下面看看 inclu...

簡單的求和 打表

status web board 定義f i 代表i的所有因子和 包括1和i 給定乙個l,r。求f l f l 1 f r 第一行輸入乙個t t 1000 代表有t組測試資料,接下來每行輸入兩個數字l,r,1 l r 1000000 每行輸出乙個整數,代表和。2 1 2 3 4 4 11 題解 看見...

C 關於AOP簡單介紹

aop aspect oriented programming 是一種將函式的輔助性功能與業務邏輯相分離的程式設計正規化 programming paradigm 其目的是將橫切關注點 cross cutting concerns 分離出來,使得程式具有更高的模組化特性。aop體現原則 單一職責原則...