女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]題目:我們把只包含因子2、3和5的數(shù)稱作丑數(shù)(Ugly Number)。例如6、8都是丑數(shù),但14不是,因?yàn)樗蜃?。習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。求按從小到大的順序的第1500個(gè)丑數(shù)。 分析:

題目:我們把只包含因子2、3和5的數(shù)稱作丑數(shù)(Ugly Number)。例如6、8都是丑數(shù),但14不是,因?yàn)樗蜃?。習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。求按從小到大的順序的第1500個(gè)丑數(shù)。

分析:這是一道在網(wǎng)絡(luò)上廣為流傳的面試題,據(jù)說google曾經(jīng)采用過這道題。

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

#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<<"請(qǐng)輸入n:";
	cin>>n;
	cout<


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

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

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

前面我們分析的時(shí)候,提到把已有的每個(gè)丑數(shù)分別都乘以2、3和5,事實(shí)上是不需要的,因?yàn)橐延械某髷?shù)是按順序存在數(shù)組中的。對(duì)乘以2而言,肯定存在某一個(gè)丑數(shù)T2,排在它之前的每一個(gè)丑數(shù)乘以2得到的結(jié)果都會(huì)小于已有最大的丑數(shù),在它之后的每一個(gè)丑數(shù)乘以2得到的結(jié)果都會(huì)太大。我們只需要記下這個(gè)丑數(shù)的位置,同時(shí)每次生成新的丑數(shù)的時(shí)候,去更新這個(gè)T2。對(duì)乘以3和5而言,存在著同樣的T3和T5。

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

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

?

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

?

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

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

關(guān)鍵字: Modbus RTU CRC 算法

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

關(guān)鍵字: 算法 嵌入式

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

關(guān)鍵字: 算法 寄存器傳輸級(jí) 數(shù)字系統(tǒng)

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

關(guān)鍵字: 算法 嵌入式

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

關(guān)鍵字: 自動(dòng)駕駛 激光雷達(dá) 算法

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

關(guān)鍵字: 算法 智能駕駛

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

關(guān)鍵字: 排序算法 算法

快速排序通過一趟排序?qū)⒋判蛄蟹指畛瑟?dú)立的兩部分,其中一部分序列的關(guān)鍵字均比另一部分序列的關(guān)鍵字小,則可分別對(duì)這兩部分序列繼續(xù)進(jìn)行排序,以達(dá)到整個(gè)序列有序的目的。

關(guān)鍵字: 快速排序 算法

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

關(guān)鍵字: 算法 快速排序算法

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

關(guān)鍵字: 限流 算法
關(guān)閉