九度-题目1214:丑数

http://ac.jobdu.com/problem.php?pid=1214

题目描述:

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

输入:

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

输出:

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

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

一开始的想法是递增遍历足够多的数字,得到长度为1500的数组。数组中每个元素对应一个丑数。这将产生问题:数组中靠后的一些元素是无法遍历得到的,或者说非常不有效。

因此换一种方法:数组中的后一个元素必然是前面某个元素的2倍/3倍/5倍。每次只要获得对应的元素即可。
#include <iostream>

using namespace std;

int min3(int a, int b, int c){
    int min=(a<b)?a:b;
    if(min>c)
        return c;
    else
        return min;
}

int getUglyNum(int index){
    if(index<=0)
        return 0;
    int a[index];
    a[0]=1;

    int idx1=0;
    int idx2=0;
    int idx3=0;
    for(int i=1; i<index; i++){
        int min=min3(a[idx1]*2, a[idx2]*3, a[idx3]*5);
        a[i]=min;
        if(min==a[idx1]*2)
            idx1++;
        if(min==a[idx2]*3)
            idx2++;
        if(min==a[idx3]*5)
            idx3++;
    }
    return a[index-1];
}
int main(){
    int n;
    while(cin>>n){
        int Ugly=getUglyNum(n);
        cout << Ugly << endl;
    }
    return 0;
}

  

时间: 2024-08-27 10:48:18

九度-题目1214:丑数的相关文章

九度 题目1335:闯迷宫 题目1365:贝多芬第九交响曲

转载请注明本文地址http://blog.csdn.net/yangnanhai93/article/details/40718149 简单说说宽度优先搜索BFS 说实话,这是第一个自己写的宽度优先搜索的题目,之前也是不太明白之间的区别,好吧,只能说自己学的太渣-- 言归正传,对于初学者来说,可能最大的概念就是一个是深度搜索,一个是宽度搜索,好吧,我表示废话了,我其实就是这个样子的,然后一直不得甚解...所以第一次上来,我就直接搜索DFS,结果太明显,就是TLE或者MLE,然后就抓狂中,这可能是

华为机试—寻找丑数 &amp;&amp; 九度OJ 1214

题目1214:丑数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1733 解决:771 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个整数N(1<=N<=1500). 输出: 可能有多组测试数据,对于每组数据, 输出第N个丑数. 样例输入: 3 样例输出: 3 #include<iostream> #in

LintCode Python 简单级题目 517.丑数

题目描述: 写一个程序来检测一个整数是不是丑数. 丑数的定义是,只包含质因子 2, 3, 5 的正整数.比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7. 注意事项 可以认为 1 是一个特殊的丑数. 您在真实的面试中是否遇到过这个题? Yes 样例 给出 num = 8,返回 true.给出 num = 14,返回 false. 标签 数学 题目分析: 循环取2/3/5的余数和商即可. 余=0,商=1时才为丑数. 源码: class Solution: # @param {i

九度 题目1122:吃糖果

题目描述: 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0). 妈妈告诉名名每天可以吃一块或者两块巧克力. 假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案. 例如: 如果N=1,则名名第1天就吃掉它,共有1种方案: 如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案: 如果N=3,则名名第1天可以吃1块,剩2块,也可以第1天吃2块剩1块,所以名名共有2+1=3种方案: 如果N=4,则名名可以

九度 题目1394:五连击数组

转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40506571 题目链接:http://ac.jobdu.com/problem.php?pid=1394 问题分析: 这个问题尽管是四星的问题.可是感觉有点过于简单了. 这个题目第一个给我们的信息是须要连续的,所以肯定会对原来的数组进行排序,接下来就是找缺多少个数了.这个题目想想会发现和找N天中最大股票的问题有点类似,就是我仅仅关心我当前的数,往前看.我如今有几个数了,然后就

九度 题目1377:缓变序列

转载请注明本文链接 http://blog.csdn.net/yangnanhai93/article/details/40474355 题目链接地址:http://ac.jobdu.com/problem.php?pid=1377 这道题目的难点在于如何分析出缓变序列的特征: 1:缓变序列排序之后必须连续 证明:假设排序之后的序列为a[1] a[2] a[3]... a[n],其中a[n]-a[n-1]>1,即an与前面的数不连续,因为缓变序列要求任何一个数的前后的变化都是1,然而对于a[n]

九度-题目1197:奇偶校验

题目描述: 输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3',输出:10110011). 输入: 输入包括一个字符串,字符串长度不超过100. 输出: 可能有多组测试数据,对于每组数据,对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行. 样例输入: 3 3a 样例输出: 10110011 10110011 01100001 来源: 2010年华中科技大学计算机研究生机试真题 对字符的ASCii进行奇校验.首先转成对应的二进制,然后判断1

九度 题目1422:Closest Number

转载请注明本文连接http://blog.csdn.net/yangnanhai93/article/details/40536263 题目链接http://ac.jobdu.com/problem.php?pid=1422 这个题目一看,10s,刚上来我就用暴力的方式去求解,果然超时了,汗... 后来想想,暴力的方式上可以进行剪枝. 1:我不用计算左和右哪个最小,我直接按照距离来,直接计算就好了,但是需要优先比较左边的. 2:如果左边或右边不存在了,那就直接在另一边找就可以了. 3:需要先排除

九度 题目1144:Freckles

题目描写叙述: In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so his Ripley's engagement falls through. Consider Dick's