剑指OFFER之丑数

题目描述:

把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

输入:

输入包括一个整数N(1<=N<=1500)。

输出:

可能有多组测试数据,对于每组数据,
输出第N个丑数。

样例输入:
3
样例输出:
3

Code:
#include <iostream>
 
using namespace std;
 
int minVal(int a,int b,int c){
    int ans;
    ans=a<b?a:b;
    return ans<c?ans:c;
}
 
int main()
{
    int UglyNum[2000];
    int index_2,index_3,index_5;
    int N,cnt,maxVal;
    while(cin>>N){
        index_2=index_3=index_5=1;
        UglyNum[1]=1;
        maxVal=1;
        cnt=1;
        while(cnt<=N){
            while(UglyNum[index_2]*2<=maxVal)
                ++index_2;
            while(UglyNum[index_3]*3<=maxVal)
                ++index_3;
            while(UglyNum[index_5]*5<=maxVal)
                ++index_5;
            UglyNum[++cnt]=minVal(UglyNum[index_2]*2,UglyNum[index_3]*3,UglyNum[index_5]*5);
            maxVal=UglyNum[cnt];
        }
        cout<<UglyNum[N]<<endl;
    }
    return 0;
}
 
/**************************************************************
    Problem: 1214
    User: lcyvino
    Language: C++
    Result: Accepted
    Time:40 ms
    Memory:1520 kb
****************************************************************/

 

posted @ 2015-01-05 09:11  tinylcy  阅读(147)  评论(0编辑  收藏  举报