今天上午上班由於沒什麼事做,就看看書,發現乙個演算法問題,開始看感覺貌似很簡單,但是越想越有意思。
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,這樣最後我們就求出來能有多少對方括號了。棧的示意圖 流程圖...