转载地址:http://blog.csdn.net/qwerty_xk/article/details/12749961

题:只有2 3 5 这三个因子的数,求第1500个   设1为第一个丑数,求第1500个丑数

解法:

1 简单的暴力搜索,对每个数进行因子判别,直到搜到第1500个

评价:耗时 不可取

2 将得到的数保存在一个数组中,按从小到大的顺序进行存放,对该数组前面的数分别乘以2 3 5,每乘一个因子,先乘到刚好大于该数组最大的值,然后break

进行下一个因子相乘  ,得到三个数,比较得到这三个数中的最小值,push进当前数组最后。

这里可以用三个下标来分别保存2 3 5 在数组中开始相乘的起始下标位置,就避免了每次都从数组的开头开始相乘,每次更新的依据为:上面三个数哪个最小,对应的那个因子

的下标进行更新

    #include<iostream>
#include<vector>
using namespace std; int min3(int a,int b,int c)
{
int tmp=(a<b?a:b);
return (tmp<c?tmp:c);
}
int main()
{
vector<int> uglyNum;
uglyNum.push_back(1); //初始只有1在数组中
int t2=0,t3=0,t5=0; //每个因子开始相乘的下标位置
int i,j,k;
while(uglyNum.size()!=1500)
{
int m2,m3,m5; //保存每个因子得到的值
for(i=t2;i<uglyNum.size();i++)
if(2*uglyNum[i]>uglyNum.back())
{
m2=2*uglyNum[i];
break;
}
for(j=t3;j<uglyNum.size();j++)
if(3*uglyNum[j]>uglyNum.back())
{
m3=3*uglyNum[j];
break;
}
for(k=t5;k<uglyNum.size();k++)
if(5*uglyNum[k]>uglyNum.back())
{
m5=5*uglyNum[k];
break;
}
int tmp = min3(m2,m3,m5);
uglyNum.push_back(tmp);
if(tmp==m2)
t2=i+1; //下标位置进行更新
if(tmp==m3)
t3=j+1;
if(tmp==m5)
t5=k+1;
}
for(int i=0;i<uglyNum.size();i++)
cout<<uglyNum[i]<<" ";
cout<<endl;
return 0;
}

运行得到的值为 : 859963392

【转载】丑数humble numbers的更多相关文章

  1. 洛谷P2723 丑数 Humble Numbers

    P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...

  2. Luogu2723丑数Humble Numbers【归并排序】

    Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...

  3. 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]

    P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...

  4. P2723 丑数 Humble Numbers

    题意:给你k个质数,定义丑数集合为k个质数随机(1--k)个相乘得到的数 求第n小的丑数 暴力...貌似不太可行,(把所有大量丑数求出来,sort   QAQ) 可以想到,对于第i个丑数f[i],它一 ...

  5. 丑数(Ugly Numbers, UVa 136)

    丑数(Ugly Numbers, UVa 136) 题目描述 我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因 ...

  6. 37.寻找丑数[Ugly numbers]

    [题目] 我们把只包含质因子2.3和5的数称作丑数(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑 ...

  7. 【题解】丑数Humble Numbers-C++

    题目描述Description对于一给定的素数集合 S = {p1, p2, …, pK},如果一个数字,当我们对其做完质因子分解后,其质因子全是来自我们给定的素数集合,则认为这个数字是个丑数.注意: ...

  8. C语言程序设计100例之(14):丑数

    例14   丑数 问题描述 丑数是其质因子只可能是2,3或5的数.前10个丑数分别为1, 2, 3, 4, 5, 6, 8, 9, 10, 12.输入一个正整数n,求第n个丑数. 输入格式 每行为一个 ...

  9. Humble Numbers(丑数) 超详解!

    给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑 ...

随机推荐

  1. 高通音频 媒体喇叭增益隐藏参数(一个QACT无法修改的参数)

    源文件位置:modem_proc\multimedia\audio\avs\src\sndhwg2.c sndhw_init()函数,2520行左右:pm_set_speaker_gain(PM_SP ...

  2. node c++ addon注意事项

    The module_name needs to match the filename of the final binary (minus the .node suffix).

  3. FinalShell Mac OS版,Linux版安装及教程

    该版本功能和windows版基本一样,但是主机检测和远程桌面功能由于兼容性问题暂时无法使用,以后会支持. 该版本功能和windows版基本一样,但是主机检测和远程桌面功能由于兼容性问题暂时无法使用,以 ...

  4. VC++ 得到的函数地址与实际函数地址不一致的原因。

    我想试验一个计算汇编指令长度的代码是否正确,因而写了如下code进行验证,但结果非常奇怪 #include <stdio.h> #include <Windows.h> int ...

  5. vmware 安装配置 ,记住这一次不要再问我了。ok?

    Linux 安装配置 ,记住这一次不要再问我了.ok? 第一步 选择版本 如果遇到问题无法自动获取的  老男孩教育-李泳谊<youjiu_linux@qq.com> 17:51:43明天开 ...

  6. 现代 PHP 新特性系列

    生成器的创建和使用 http://laravelacademy.org/post/4317.html

  7. 【BZOJ3995】[SDOI2015]道路修建 线段树区间合并

    [BZOJ3995][SDOI2015]道路修建 Description  某国有2N个城市,这2N个城市构成了一个2行N列的方格网.现在该国政府有一个旅游发展计划,这个计划需要选定L.R两列(L&l ...

  8. 封装AJax实现JSON前台与后台交互

    实践技术点:1.AJax自定义封装 2.后台序列化与反序列化JSON 3.客户端解析JSON字符串,处理DOM 实现代码如下: 1.JS脚本代码:   1 /*** NOTE:AJAX处理JS TIM ...

  9. 使用jquery的ajax方法获取下拉列表值

    AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新,用户体验非常好. ...

  10. Git中如何将代码恢复到之前某个节点

    本文主要讲如何使用小乌龟软件将代码恢复到之前某个节点. 一 说明 在实际项目开发中,都是很多人一起联合开发,往往会遇到这种情况:马上要发版本了,突然发现一个致命BUG,而这个BUG是由于某个小伙伴修改 ...