返回第n个丑数
来源:互联网 发布:知乎 电脑版 编辑:程序博客网 时间:2024/05/22 05:15
把只包含质因子2、3和5的数称作丑数(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数。
解法2:在当前丑数里乘以2,3,5,找到最小的后续丑数添加到序列里
写一个高效算法,返回第n个丑数。
解法1: 判断某个数是否为丑数,连续找到第n个丑数
#include <iostream>using namespace std;bool isUgly(int num){if(num < 1)return false;if(num == 1)return true;while(num % 2 == 0)num /= 2;while(num % 3 == 0)num /= 3;while(num % 5 == 0)num /= 5;return num == 1;}int nthUgly(int n){int index = 1, x = 2;while(index < n){if(isUgly(x)){index++;++x;}else++x;}return x - 1;}int main(){int n;cout << "input the number n:\n";cin >> n;cout << nthUgly(n);return 0;}
解法2:在当前丑数里乘以2,3,5,找到最小的后续丑数添加到序列里
#include <iostream>using namespace std;int minOf3(int a, int b, int c){int temp = (a < b ? a : b);return (temp < c ? temp : c);}long findUgly(int n){int *ugly = new int[n];ugly[0] = 1;int index2 = 0, index3 = 0, index5 = 0;int index = 1;while(index < n){int val = minOf3(ugly[index2] * 2, ugly[index3] * 3, ugly[index5] * 5);ugly[index] = val;while(val >= ugly[index2] * 2)++index2;while(val >= ugly[index3] * 3)++index3;while(val >= ugly[index5] * 5)++index5;index++;}cout <<ugly[n - 1];delete [] ugly;return 0;}int main(){int n;cout << "input the number n:\n";cin >> n;findUgly(n);return 0;}
0 0
- 返回第n个丑数
- 查找第N个丑数
- 找到第N个丑数
- 输出第n个丑数
- 求第n个丑数
- 求第n个丑数
- 第n个丑数
- 找到第N个丑数
- 第n个丑数
- 输出第N个丑数
- 输出第N个丑数
- 返回线性链表的倒数第n个元素
- 返回单链表中倒数第N个元素问题
- LinkLists 链表中返回倒数第n个元素 @CareerCup
- 一个单链表中返回倒数第n个元素
- 返回单链表的倒数第n个节点
- 算法: 函数返回第n行的杨辉三角
- 返回第N大的数--Mysql(学习)
- ehcache 简单例子
- Jquery中$(document).ready()与window.onload方法的区别
- 学习java数据结构基础知识之链表
- UIView_TableView
- UISegmentedControl简单使用
- 返回第n个丑数
- iOS零散知识点
- android启动过程及各个镜像间的关系
- 虚拟化平台proxmox集群和HA配置
- org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy....
- mybatis从入门到精通
- Opencv interface 中的BaseLOaderCallback
- HTML,JSP DOCTYPE 的重要性
- Volley框架 以及 设置request超时时间