面试题43:丑数
来源:互联网 发布:wow 3.3数据库 编辑:程序博客网 时间:2024/06/05 20:11
方法一:逐个数进行判断是否为丑数,效率低下
代码如下:
#include "stdafx.h"#include <iostream>using namespace std;//判断一个数是否为丑数 1被认为是第一个丑数bool IsUglyNum(int nNum){if (nNum <= 0){return false;}while (nNum % 2 == 0){nNum /= 2;}while (nNum % 3 == 0){nNum /= 3;}while (nNum % 5 == 0){nNum /= 5;}return (nNum == 1) ? true : false;}//返回第nIndex个丑数int GetUglyNum(int nIndex){if (nIndex <= 0){return 0;}int nNum = 1;int nUglyNum = 0;//记录第nIndex个丑数int nCount = 0;//计数while (nCount < nIndex){if (IsUglyNum(nNum)){nCount++;}nNum++;}nUglyNum = nNum - 1;return nUglyNum;}int _tmain(int argc, _TCHAR* argv[]){cout << GetUglyNum(7) << endl;system("pause");return 0;}
方法二:空间换时间,用一个数组保存排好序的丑数
代码如下:
#include "stdafx.h"#include <iostream>using namespace std;int Min(int a, int b, int c){int nMin = (a > b) ? b : a;return (nMin > c) ? c : nMin;}//返回第nIndex个丑数int GetUglyNum(int nIndex){ if (nIndex <= 0) {return 0; }//申请一个数组空间存放丑数int *pUglyNum = new int[nIndex];pUglyNum[0] = 1;int *pUglyNum2 = pUglyNum;int *pUglyNum3 = pUglyNum;int *pUglyNum5 = pUglyNum;int nNextIndex = 1;int nMin = 0;while (nNextIndex < nIndex){ nMin = Min((*pUglyNum2) * 2, (*pUglyNum3) * 3, (*pUglyNum5) * 5);pUglyNum[nNextIndex] = nMin;while ((*pUglyNum2) * 2 <= pUglyNum[nNextIndex]){++pUglyNum2;}while ((*pUglyNum3) * 3 <= pUglyNum[nNextIndex]){++pUglyNum3;}while ((*pUglyNum5) * 5 <= pUglyNum[nNextIndex]){++pUglyNum5;}nNextIndex++;}int nUglyNum = pUglyNum[nIndex - 1];delete [] pUglyNum;return nUglyNum;}int _tmain(int argc, _TCHAR* argv[]){cout << GetUglyNum(1500) << endl;system("pause");return 0;}
- 面试题43:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34 丑数
- 面试题34:丑数
- 面试题38:丑数
- 面试题34:丑数
- 面试题 <丑数>(10)
- 面试题34:丑数
- 【面试题34】丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题 34: 丑数
- 面试题34. 丑数
- QT 编译常见错误:usr/bin/ld: cannot find
- ACE学习之定时器(Timer)
- Android短信转发默认不需要转发号码修改方法
- Shell脚本调试技术
- 动态监听配置示例
- 面试题43:丑数
- 边看边写(排列组合及丑数问题 )
- 多态的三个必要条件
- cloudfoundry集成oracle之kill long transaction测试
- ACE学习之创建简单的服务器端和客户端
- 0905 python打开网页查天气~
- window.open()你真的会了吗?
- KVC设计模式讲解
- Prism教程五: EventAggregation模块间的通信