怎样用c++仿照筛选法利用一数组找出1到100间的所有丑数?

2026年09月19日 09:23
有1个网友回答
网友(1):

此程序类似,稍稍修改即可
思路大体都一样
#include
#include
int main()
{ int i,j,n,min,t2,t3,t5,t7,h[10000],h2[10000],h3[10000],h5[10000],h7[10000];
scanf("%d",&n); //scanf一个数n;
h[1]=1;h2[1]=2;h3[1]=3;h5[1]=5;h7[1]=7; //把各数列设初值;
t2=t3=t5=t7=1; //把计数值设初值;
for(i=2;i<=n;i++) //开始构造H数;
{ min=h2[1]; //先把h2[1]付给min;
if(h3[1] if(h5[1] if(h7[1] h[i]=min; //求出第i个值;
t2++;h2[t2]=h[i]*2; //计数值++,列出下四个值;
t3++;h3[t3]=h[i]*3;
t5++;h5[t5]=h[i]*5;
t7++;h7[t7]=h[i]*7;
if(h2[1]==min) {for(j=1;j<=t2-1;j++) h2[j]=h2[j+1];t2--;} //把第一个值被选中的数列向前移一位;
if(h3[1]==min) {for(j=1;j<=t3-1;j++) h3[j]=h3[j+1];t3--;}
if(h5[1]==min) {for(j=1;j<=t5-1;j++) h5[j]=h5[j+1];t5--;}
if(h7[1]==min) {for(j=1;j<=t7-1;j++) h7[j]=h7[j+1];t7--;}
}
printf("%d\n",h[n]); //输出第n个H数。
system("pause");
return 0;
}