找“1”问题
題目:
給定一個十進制的正整數,寫下從1開始,到N的所有整數,然后數一下其中出現“1”的個數。 要求: 1.寫一個函數 f(N) ,返回1 到 N 之間出現的“1”的個數。例如 f(12)? = 5。 2.在32位整數范圍內,滿足條件的“f(N) =N”的最大的N是多少。 思路: 這道題目存在者一些規律: 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)=個位出現的1數+十位出現的1數+百位出現的1數 當N = abcde時 以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<<"請輸入數字:";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<<"出現數字1的個數為:"<<count<<endl;return 0; }
截圖: 總結: 一些題目總存在一些的規律,我們在遇到問題時應多多總結尋找題目中的規律,多列舉一些有代表的數從中找到規律在推廣到一般,解決問題。
轉載于:https://www.cnblogs.com/lingxi/p/4549564.html
總結
- 上一篇: Shell编程——shell常用命令
- 下一篇: Tomcat的安装及使用