两种方法求丑数
来源:互联网 发布:geohot编程能力 编辑:程序博客网 时间:2024/06/10 05:49
我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。
方法1 :
暴力破解,逐个判断
代码:
<pre name="code" class="cpp">#include <iostream>#include <vector>using namespace std;//判断是否是丑数bool isUgly(int index){while(index % 2 == 0){index /= 2;}while(index % 3 == 0){index /= 3;}while(index % 5 ==0){index /=5;}if(index == 1)return true;elsereturn false;}int print(int index){int count=1;int number = 0;int uglyFound =0;while(uglyFound < index){++number;if(isUgly(number)){++uglyFound;}}return number;}int main(){cout<<print(1500); return 0;}
运行结果:
方法2 : 采用空间换时间,只是判断丑数。一个丑数可以有另外一个丑数* 2 或者*3 或者*5 得到。
#include <iostream>#include <vector>using namespace std;int Min(int pm2,int pm3,int pm5){int min = pm2 > pm3 ? pm3 : pm2;return min > pm5 ? pm5 : min;}void print(unsigned int index){if(index == 0)return;int * pUglyNumber = new int[index];int pNextIndex=1;pUglyNumber[0] = 1;int *pM2 = pUglyNumber;int *pM3 = pUglyNumber;int *pM5 = pUglyNumber;while(pNextIndex < index){int min=Min(*pM2 * 2,*pM3 * 3, *pM5 * 5);pUglyNumber[pNextIndex] = min;while(*pM2 * 2 <=pUglyNumber[pNextIndex])++pM2;while(*pM3 * 3 <=pUglyNumber[pNextIndex])++pM3;while(*pM5 * 5 <= pUglyNumber[pNextIndex])++pM5;pNextIndex ++;}int ugly = pUglyNumber[pNextIndex - 1];delete [] pUglyNumber;cout<< ugly;}int main(){print(7); return 0;}
运行结果:
1 0
- 两种方法求丑数
- 两种keyboardinput方法
- 模式识别两种方法
- 缩略图两种方法
- 两种封装方法
- 排列组合(两种方法)
- LCA两种方法
- POJ1703 两种方法
- 两种删除方法
- popup的两种方法
- 两种内存管理方法
- 工资系统两种方法
- 两种传递地址方法
- 求最大公约数两种方法
- 数据库连接的两种方法
- 配置数据源两种方法
- 两种获取主机名方法
- 两种进程开启方法
- ShellExecuted的用法
- Qwt库简介
- cocos2dx3.0rc如何创建新工程
- [经典DFS]poj1011Sticks
- POJ 2387 Til the Cows Come Home (最短路+Dijkstra)
- 两种方法求丑数
- url特殊字符转义及解决方法
- java运行时内存区域划分(1)
- ZOJ 1586(最小生成树)
- Hadoop本地模式
- 树链剖分
- JDBC连接MySQL数据库及示例
- opencv 滚动条
- hdu 1013 Digital Roots