日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導讀]題目:我們把只包含因子2、3和5的數稱作丑數(Ugly Number)。例如6、8都是丑數,但14不是,因為它包含因子7。習慣上我們把1當做是第一個丑數。求按從小到大的順序的第1500個丑數。 分析:

題目:我們把只包含因子2、3和5的數稱作丑數(Ugly Number)。例如6、8都是丑數,但14不是,因為它包含因子7。習慣上我們把1當做是第一個丑數。求按從小到大的順序的第1500個丑數。

分析:這是一道在網絡上廣為流傳的面試題,據說google曾經采用過這道題。

算法一:所謂一個數m是另一個數n的因子,是指n能被m整除,也就是n % m == 0。根據丑數的定義,丑數只能被2、3和5整除。也就是說如果一個數如果它能被2整除,我們把它連續(xù)除以2;如果能被3整除,就連續(xù)除以3;如果能被5整除,就除以連續(xù)5。如果最后我們得到的是1,那么這個數就是丑數,否則不是。

#include 
using namespace std;

int GetUglyNum1(int n)
{
	int i, temp, time=0;
	for(i=1; ; i++)
	{
		temp=i;
		while(temp%2==0)
			temp/=2;
		while(temp%3==0)
			temp/=3;
		while(temp%5==0)
			temp/=5;
		
		if(temp==1)
		{
			time++;
			if(time==n)
				break;
		}
	}
	return i;
}

void main()
{
	int n;
	cout<<"請輸入n:";
	cin>>n;
	cout<


該算法非常直觀,代碼也非常簡潔,但最大的問題我們每個整數都需要計算。即使一個數字不是丑數,我們還是需要對它做求余數和除法操作。因此該算法很耗時。

???????? 接下來我們換一種思路來分析這個問題,試圖只計算丑數,而不在非丑數的整數上花費時間。根據丑數的定義,丑數應該是另一個丑數乘以2、3或者5的結果(1除外)。因此我們可以創(chuàng)建一個數組,里面的數字是排好序的丑數。里面的每一個丑數是前面的丑數乘以2、3或者5得到的。

這種思路的關鍵在于怎樣確保數組里面的丑數是排好序的。我們假設數組中已經有若干個丑數,排好序后存在數組中。我們把現(xiàn)有的最大丑數記做M?,F(xiàn)在我們來生成下一個丑數,該丑數肯定是前面某一個丑數乘以2、3或者5的結果。我們首先考慮把已有的每個丑數乘以2。在乘以2的時候,能得到若干個結果小于或等于M的。由于我們是按照順序生成的,小于或者等于M肯定已經在數組中了,我們不需再次考慮;我們還會得到若干個大于M的結果,但我們只需要第一個大于M的結果,因為我們希望丑數是按從小到大順序生成的,其他更大的結果我們以后再說。我們把得到的第一個乘以2后大于M的結果,記為M2。同樣我們把已有的每一個丑數乘以3和5,能得到第一個大于M的結果M3和M5。那么下一個丑數應該是M2、M3和M5三個數的最小者。

前面我們分析的時候,提到把已有的每個丑數分別都乘以2、3和5,事實上是不需要的,因為已有的丑數是按順序存在數組中的。對乘以2而言,肯定存在某一個丑數T2,排在它之前的每一個丑數乘以2得到的結果都會小于已有最大的丑數,在它之后的每一個丑數乘以2得到的結果都會太大。我們只需要記下這個丑數的位置,同時每次生成新的丑數的時候,去更新這個T2。對乘以3和5而言,存在著同樣的T3和T5。

#include 
using namespace std;
int Min(int num1, int num2, int num3)
{
	int min=(num1>n;
         cout<

第一種思路相比,這種算法不需要在非丑數的整數上做任何計算,因此時間復雜度要低很多。當然我們也要指出,第二種算法由于要保存已經生成的丑數,因此需要一個數組,從而需要額外的內存。第一種算法是沒有這樣的內存開銷的。

?

感謝:http://www.cnblogs.com/mingzi/archive/2009/08/04/1538491.html

?

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在工業(yè)控制系統(tǒng)中,Modbus RTU協(xié)議的CRC校驗如同通信網絡的"免疫系統(tǒng)",某石化廠DCS系統(tǒng)曾因CRC計算錯誤導致0.3%的數據包丟失,引發(fā)連鎖控制故障。本文將深入解析CRC-16/MODBUS算法原理,對比軟件...

關鍵字: Modbus RTU CRC 算法

加密算法分對稱加密和非對稱算法,其中對稱加密算法的加密與解密密鑰相同,非對稱加密算法的加密密鑰與解密密鑰不同,此外,還有一類不需要密鑰的散列算法。

關鍵字: 算法 嵌入式

在現(xiàn)代數字系統(tǒng)設計中,將算法高效地轉化為 RTL(寄存器傳輸級)實現(xiàn)是 FPGA 工程師的核心任務之一。這一過程不僅需要對算法有深入理解,還需掌握 FPGA 的硬件特性和設計技巧。本文將詳細介紹從算法到 RTL 實現(xiàn)的關...

關鍵字: 算法 寄存器傳輸級 數字系統(tǒng)

從本質上講,算法是一種有條不紊、分步驟解決問題或完成任務的方法。無論是簡單的數字相加公式,還是復雜的機器學習協(xié)議,算法都是軟件應用的基礎,確保任務能夠高效有效地執(zhí)行。

關鍵字: 算法 嵌入式

在自動駕駛技術的發(fā)展歷程中,激光雷達(LiDAR)宛如一顆備受矚目的新星,其獨特的技術特性使其成為追求高安全性、高可靠性自動駕駛方案的首選。然而,這顆新星并非毫無爭議,“價格昂貴、結構復雜、算法難度高” 等標簽,也讓一些...

關鍵字: 自動駕駛 激光雷達 算法

4月2日消息,近日,有關智能駕駛而引發(fā)的交通事故在網絡上引起了大家的熱烈討論,對此,央視網評指出,“智能駕駛”,也請握緊方向盤。

關鍵字: 算法 智能駕駛

所謂排序算法,即通過特定的算法因式將一組或多組數據按照既定模式進行重新排序。這種新序列遵循著一定的規(guī)則,體現(xiàn)出一定的規(guī)律,因此,經處理后的數據便于篩選和計算,大大提高了計算效率。對于排序,我們首先要求其具有一定的穩(wěn)定性,...

關鍵字: 排序算法 算法

快速排序通過一趟排序將待排序列分割成獨立的兩部分,其中一部分序列的關鍵字均比另一部分序列的關鍵字小,則可分別對這兩部分序列繼續(xù)進行排序,以達到整個序列有序的目的。

關鍵字: 快速排序 算法

算法,作為解決問題的精確描述,是描述策略機制的系統(tǒng)方法。讓我們在周末輕松探討五個具有深遠影響的算法:Metropolis-Hastings算法、單純形法、快速傅立葉變換、快速排序算法,以及計算特征值的QR算法。這些算法在...

關鍵字: 算法 快速排序算法

服務需要保護自己,以免被太多的請求淹沒(無論是惡意或無意的),從而保持可用性。舉個生活中的例子,某個景區(qū),平時可能根本沒什么人前往,但是一旦到了國慶假日就人滿為患,這時景區(qū)管理人員就會實施一系列的限流舉措,來限制進入的人...

關鍵字: 限流 算法
關閉