找“1”问题
題目:
給定一個(gè)十進(jìn)制的正整數(shù),寫(xiě)下從1開(kāi)始,到N的所有整數(shù),然后數(shù)一下其中出現(xiàn)“1”的個(gè)數(shù)。 要求: 1.寫(xiě)一個(gè)函數(shù) f(N) ,返回1 到 N 之間出現(xiàn)的“1”的個(gè)數(shù)。例如 f(12)? = 5。 2.在32位整數(shù)范圍內(nèi),滿足條件的“f(N) =N”的最大的N是多少。 思路: 這道題目存在者一些規(guī)律: f(0)=0;f(1)=1;f(2-9)=1; f(10)=1+(0+1)=2; f(11)=(1+1)+(1+1)=4; f(13)=(1+1)+(3+1)=6; f(23)=(2+1)+10=13; f(33)=(3+1)+10=14; f(93)=(9+1)+10=20; f(123)=個(gè)位出現(xiàn)的1數(shù)+十位出現(xiàn)的1數(shù)+百位出現(xiàn)的1數(shù) 當(dāng)N = abcde時(shí) 以c位為例 if(c==0) num=ab*100; if(c==1) num=ab*100+de+1; if(c>1) num=(ab+1)*100 代碼: #include <iostream> using namespace std; int main() {int n;cout<<"請(qǐng)輸入數(shù)字:";cin>>n;int count=0; int factor=1; int LowerNum=0;int CurNum=0;int HigherNum=0;while (n/factor!=0) {LowerNum=n-(n/factor)*factor;CurNum=(n/factor)%10;HigherNum=n/(factor*10);if(CurNum==0) count=count+HigherNum*factor; if(CurNum==1)count=count+HigherNum*factor + LowerNum +1;if(CurNum>1)count=count+(HigherNum+1)*factor;factor=factor*10;}cout<<"出現(xiàn)數(shù)字1的個(gè)數(shù)為:"<<count<<endl;return 0; }
截圖: 總結(jié): 一些題目總存在一些的規(guī)律,我們?cè)谟龅絾?wèn)題時(shí)應(yīng)多多總結(jié)尋找題目中的規(guī)律,多列舉一些有代表的數(shù)從中找到規(guī)律在推廣到一般,解決問(wèn)題。
轉(zhuǎn)載于:https://www.cnblogs.com/lingxi/p/4549564.html
總結(jié)
- 上一篇: Shell编程——shell常用命令
- 下一篇: Tomcat的安装及使用