#include "iostream"
const int N=5000;
using namespace std;
bool judge(long long int a[],long long int num,int j); //判断待插入的数字是否和数组之前的元素值重复,不重复则返回true
void sort(long long int a[],int N); //冒泡排序
int main()
{
long long int a[N];
a[0]=3;
a[1]=5;
a[2]=7;
long long int num=59084709587505;
int j=3;
for(int i=0;(i<N)&&(j<N)&&i<j;i++)
{
if(a[i]>59084709587505) //数据超出范围,不用插入,并且过大会发生数据溢出
continue;
a[j]=(long long int)(a[i]*(long long int)3);
if(judge(a,a[j],j)) //不重复则插入,更新j的下标
j++;
a[j]=(long long int)(a[i]*(long long int)5);
if(judge(a,a[j],j))
j++;
a[j]=(long long int)(a[i]*(long long int)7);
if(judge(a,a[j],j))
j++;
}
j=j-1;
sort(a,j);
for(int i=0;i<=j;i++)
{
cout<<a[i]<<" "<<endl;
if(a[i]==59084709587505)
{cout<<i+1<<endl; break;} //数组下标起始是0,所以元素个数要加1
}
return 0;
}
bool judge(long long int a[],long long int num,int j)
{
for(int i=0;i<j;i++)
if(a[i]==num)
return false;
return true;
}
void sort(long long int a[],int N) //冒泡排序
{
for(int i=N;i>0;i--)
{
for(int j=0;j<i;j++)
{
if(a[j]>a[j+1])
{
long long int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
原理可参考此篇博客https://blog.csdn.net/qq_40727168/article/details/103328390
我只是用了比较初级的数组方法求解,适合小白看懂,答案为1905。有疑问可在评论区留言