乙個演算法問題

2021-08-25 18:19:54 字數 1124 閱讀 4249

今天上午上班由於沒什麼事做,就看看書,發現乙個演算法問題,開始看感覺貌似很簡單,但是越想越有意思。

1,題目描述:

給定乙個十進位制的正整數n,寫下從1開始到n所有出現「1」的個數。

例如:n = 2 ,寫下 1 ,2 。出現了乙個1;

n = 12,寫下1,2,3,4,5,6,7,8,9,10,11,12.這樣1的個數是5;

問題是:

1,寫乙個函式f(n),返回1到n之間出現的1的個數,比如f(12) = 5.

2,在32位證書範圍內,滿足條件「f(n) = n」的最大的n是多少?

一開始我看到這個問題,第一反應就是遞迴,感覺只要解決兩個問題就可以了,一是算出n含有的1的個數,再根據f(n-1)就能得到f(n)的值。其中f(1) = 1 ;這是乙個最簡單的遞迴方法。寫出的**如下:

public class jeho1

public static int count1inone(int m)

return count;

}/**

* @param args

*/public static void main(string args)

system.out.println(count1(33));}}

剛開始我輸入幾個比較小點的數,發現算的都很正常,但是到了10k的時候就不行了,一看傻13了,棧溢位了。。。確實,這樣遞迴看樣子是不可能實現大資料計算的。沒辦法,只有繼續看書尋求更好的方法。承認自己數學沒有學好,看到這樣的東西都不會望資料本身想,而總是想利用那些最基本的演算法來實現。

書上的演算法寫的好複雜,簡單來講就是先從數字本來來找規律,數字的個位十位百位分開來看。由於被pdf加密,不能複製,所以自己就不太好來講了,貌似可以上傳附件,大家可以自己開啟看看,這個是我按照它演算法描述寫的,果然計算結果就是不一樣。**獻上先:

public class jeho

facror *= 10;

}return count;

}/**

* @param args

*/public static void main(string args)

}system.out.println(count);

}測試了下,輸出乙個結果超快,哎,自己腦子還是很不夠用啊,得多多學習。

乙個布局演算法問題解析

已知條件 寬度已知且有限,高度無限的區域內,有n個方格,已知這些方格的x y 座標以及寬度w和高度h,方格不重疊 需求 在空間內找個乙個位置,可以放的下乙個固定寬高 如4 x 4 的方格,原則 離原點最近且y軸最上 關鍵點 位置資訊轉化為二維陣列 目標點 每個已知方格的左下角點 a,右下角點 b,和...

求助 乙個彩票的演算法問題 !

知識前提 這個是 3d 的玩法 簡單先了解下!什麼叫組3 什麼叫組6 什麼叫豹子 豹子就是三個位置數字相同的號碼,總共十注 000 111 222 直到999。直選號碼確定數字位置 組選號碼不需確定號碼位置。組選三就是三個數字中有兩個相同,比如說你買組選三055 對應055 505 550三注直選號...

乙個演算法題 括號匹配問題。

問 給予乙個字串為 請寫出程式求出其有多少對 一般這種問題都是想讓你通過資料結構去處理,仔細回想一下我們學過的資料結構,棧的先進後出是否能處理這個問題?將字串遍歷,遇到左方括號 時將其壓入棧中,遇到右方括號 時取出棧頂元素匹配,並將對數加1,這樣最後我們就求出來能有多少對方括號了。棧的示意圖 流程圖...