• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            尋找丑數(shù)

            諾西筆試最后一道題,題意:
            把只包含質(zhì)因子2、3和5的數(shù)稱(chēng)作丑數(shù)(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。
            寫(xiě)一個(gè)高效算法,返回第n個(gè)丑數(shù)。

            最普通(也最耗時(shí))的做法是從1開(kāi)始遍歷,然后判斷這個(gè)數(shù)的因式分解中只包含2,3,5,滿足則找到了一個(gè),一直找下去,直到第n個(gè)被找出!測(cè)試了一下,找第1500個(gè)丑數(shù)耗時(shí)40秒!

            分析:假設(shè)數(shù)組ugly[N]中存放不斷產(chǎn)生的丑數(shù),初始只有一個(gè)丑數(shù)ugly[0]=1,由此出發(fā),下一個(gè)丑數(shù)由因子2,3,5競(jìng)爭(zhēng)產(chǎn)生,得到ugly[0]*2, ugly[0]*3, ugly[0]*5, 顯然最小的那個(gè)數(shù)是新的丑數(shù),所以第2個(gè)丑數(shù)為ugly[1]=2,開(kāi)始新一輪的競(jìng)爭(zhēng),由于上一輪競(jìng)爭(zhēng)中,因子2獲勝,這時(shí)因子2應(yīng)該乘以u(píng)gly[1]才顯得公平,得到ugly[1]*2,ugly[0]*3,ugly[0]*5, 因子3獲勝,ugly[2]=3,同理,下次競(jìng)爭(zhēng)時(shí)因子3應(yīng)該乘以u(píng)gly[1],即:ugly[1]*2, ugly[1]*3, ugly[0]*5, 因子5獲勝,得到ugly[3]=5,重復(fù)這個(gè)過(guò)程,直到第n個(gè)丑數(shù)產(chǎn)生。總之:每次競(jìng)爭(zhēng)中有一個(gè)(也可能是兩個(gè))因子勝出,下一次競(jìng)爭(zhēng)中 勝出的因子就應(yīng)該加大懲罰!

            程序如下所示(只要把程序中的因子改一下就可以得到新的題目),耗時(shí)忽略不計(jì):
            運(yùn)行結(jié)果:第1500個(gè)丑數(shù):859963392, 第1691個(gè)丑數(shù)2 125 764 000,第1692個(gè)丑數(shù)就越界了。
            int表示的最大整數(shù)是2,147,483,647,可由std::cout<<(std::numeric_limits<int>::max)()<<"\n";給出!

            #include <iostream>   
            using namespace std;   
              
            int mymin(int a, int b, int c)   
            {   
                
            int temp = (a < b ? a : b);   
                
            return (temp < c ? temp : c);   
            }
               
            int FindUgly(int n) //
            {   
                
            int* ugly = new int[n];   
                ugly[
            0= 1;   
                
            int index2 = 0;   
                
            int index3 = 0;   
                
            int index5 = 0;   
                
            int index = 1;   
                
            while (index < n)   
                
            {   
                    
            int val = mymin(ugly[index2]*2, ugly[index3]*3, ugly[index5]*5); //競(jìng)爭(zhēng)產(chǎn)生下一個(gè)丑數(shù)   
                    
            if (val == ugly[index2]*2//將產(chǎn)生這個(gè)丑數(shù)的index*向后挪一位;  
                        ++index2;   
                    
            if (val == ugly[index3]*3)   //這里不能用elseif,因?yàn)榭赡苡袃蓚€(gè)最小值,這時(shí)都要挪動(dòng);
                        
            ++index3;   
                    
            if (val == ugly[index5]*5)   
                        
            ++index5;   
                    ugly[index
            ++= val;   
                }
               
             
            /*/
                for (int i = 0; i < n; ++i)   
                    cout << ugly[i] << endl;   
             //
            */

                
            int result = ugly[n-1];   
                delete[] ugly;   
                
            return result;   
            }
               
             
            int main()   
            {   
                
            int num=1;
                  printf("input the number: \n");
                scanf(
            "%d"&num);
                printf(
            "%d \n",FindUgly(num));   
                
            return 0;   
            }


            posted on 2010-10-24 21:25 oliver 閱讀(3863) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Algorithm

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆檔案

            文章分類(lèi)

            文章檔案

            個(gè)人專(zhuān)欄

            技術(shù)網(wǎng)站

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            奇米影视7777久久精品人人爽| 久久综合香蕉国产蜜臀AV| av无码久久久久不卡免费网站| 久久精品国产清高在天天线| 精品久久综合1区2区3区激情| 婷婷久久综合九色综合九七| 日韩精品久久久久久免费| 99久久亚洲综合精品网站| 久久综合九色综合精品| 久久亚洲精品国产精品婷婷| 91精品国产91久久久久久| 久久久久久免费视频| 久久亚洲国产中v天仙www| 久久久久精品国产亚洲AV无码| 久久精品国产99久久久香蕉| 久久国产精品99国产精| 久久久久国色AV免费观看| 99国产精品久久| 99久久亚洲综合精品成人| 午夜精品久久久久久影视777| 国产精品久久久福利| 18岁日韩内射颜射午夜久久成人| 一本大道久久香蕉成人网| 久久男人AV资源网站| 久久精品中文字幕第23页| 成人综合伊人五月婷久久| 久久中文字幕人妻丝袜| 国内精品久久久久影院网站| 无码精品久久久天天影视 | 日产精品99久久久久久| 久久精品亚洲精品国产欧美| 精品久久久久久国产91| 国产精品久久久久9999| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 国产欧美一区二区久久| 欧美va久久久噜噜噜久久| 伊人久久大香线蕉av不卡| 伊人久久大香线蕉av一区| 精品伊人久久大线蕉色首页| 久久久久青草线蕉综合超碰| 精产国品久久一二三产区区别|