Learning C/C++

#include<iostream>
using namespace std;
//只包含因子2,3,5的数称为丑数;
int Min(int a1, int a2, int a3)
{
int min = (a1 < a2) ? a1 : a2;
return (min < a3) ? min : a3;
}
int GetUglyNumber(int index)
{
if(index <= 0)
return 0;
int *pUglyNumbers = new int[index];
pUglyNumbers[0] = 1;
int nextIndex = 1;
int *p2 = pUglyNumbers;
int *p3 = pUglyNumbers;
int *p5 = pUglyNumbers;
while(nextIndex < index)
{
int min = Min(*p2 * 2, *p3 * 3, *p5 * 5);
pUglyNumbers[nextIndex] = min;
while(*p2 * 2 <= pUglyNumbers[nextIndex])//找到2倍数刚好大于排好序的末数的那个数
++p2;
while(*p3 * 3 <= pUglyNumbers[nextIndex])//找到3倍数刚好大于排好序的末数的那个数
++p3;
while(*p5 * 5 <= pUglyNumbers[nextIndex])//找到5倍数刚好大于排好序的末数的那个数
++p5;
++nextIndex;
}
int ugly = pUglyNumbers[nextIndex - 1];
delete[] pUglyNumbers;
return ugly;
}
//求包含2或3或5的数的序列;
int GetNumber(int index)
{
if(index < 1)
return 0;
int *pNumbers = new int[index + 1];
pNumbers[0] = 1;
int pindex = 1;
int pNum = 1;
while (pindex <= index)
{
++pNum;
if((pNum % 2 == 0 )|| (pNum % 3 == 0 ) || (pNum % 5 == 0 ))
pNumbers[pindex ++] = pNum;
}
int number = pNumbers[index];
delete[] pNumbers;
return number;
}
int GetNumber_refine(int index)
{
if(index < 1)
return 0;
int *pNumbers = new int[index + 1];
pNumbers[0] = 1;
int pIndex = 1;
int i2 = 1;
int i3 = 1;
int i5 = 1;
while(pIndex <= index)
{
int min = Min(2 * i2, 3 * i3, 5 * i5);
pNumbers[pIndex] = min;
while(2 * i2 <= pNumbers[pIndex])
++i2;
while(3 * i3 <= pNumbers[pIndex])
++i3;
while(5 * i5 <= pNumbers[pIndex])
++i5;
++pIndex;
}
int number = pNumbers[index];
delete[] pNumbers;
return number;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值