算法思想类似于丑数问题,定义一个数组用来存放产生的结果,里面的数字是排好顺序的,前三项分别是3,5,7,然后面的数字分别是前面数字乘以3,5,7得到的,去最小值添加到数组中。
#include <iostream>
using namespace std;
int Min(int num1,int num2,int num3)
{
int min=(num1<num2?num1:num2);
min=(min<num3)?min:num3;
return min;
}
int FindkMax(int k){
if(k<0)
return 0;
int *pNumber=new int[k+1];
pNumber[0]=1;
int index=1;
int *pMultiply3=pNumber;
int *pMultiply5=pNumber;
int *pMultiply7=pNumber;
while(index<=k)
{
int minNum=Min(*pMultiply3*3,*pMultiply5*5,*pMultiply7*7);
pNumber[index]=minNum;
while(*pMultiply3*3<=minNum)
pMultiply3++;
while(*pMultiply5*5<=minNum)
pMultiply5++;
while(*pMultiply7*7<=minNum)
pMultiply7++;
index++;
}
int kNum=pNumber[index-1];
delete[] pNumber;
return kNum;
}
int main()
{
int n;
int maxK=0;
cout<<"Please input K:";
cin>>n;
maxK=FindkMax(n);
//cout<<"aaa "<<endl;
cout<<maxK<<endl;
}