当前位置:   article > 正文

蓝桥杯-幸运数 (模拟)_幸运数(蓝桥杯)

幸运数(蓝桥杯)

题目大意:根据幸运数的条件,不断地将幸运数的倍数删去,留下的就是幸运数。要求的是在某个区间,幸运数的个数。

题目分析:这道题直接模拟删除的步骤,就可以得到一个幸运数的数组,然后在数组中求给定区间上的幸运数的个数即可。

代码解释:首先将2的倍数从数组中刨去,那么num数组中就只剩下1,3,5,7,9,11,13……

然后我取到数组中的第二个数,也就是3,将所有位置是3的倍数的数删掉,也就是将不是3的倍数的数保留下来。

经历了这样一次循环之后,num数组变成了1,3,7,9,13……

然后再取数组中的第三个数7,因此代码中k每次循环过后,自增1,表示这次取下一个幸运数的倍数。

最后取出给定区间上的幸运数的个数即可。

代码展示:

  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4. int main(){
  5. int m,n;
  6. cin>>m>>n;
  7. int num[n];
  8. memset(num,0,sizeof(num));
  9. for(int i=1;i<n;i++)
  10. num[i] = i*2-1; //先刨去2的倍数
  11. int temp = 0;
  12. int k=2;
  13. int j = 1;
  14. do{
  15. temp = num[k++]; //得到当前的幸运数,之后该幸运数的倍数会被删掉
  16. for(int i=1;i<n;i++){
  17. if(i%temp!=0)
  18. num[j++] = num[i]; //保留当前数组中的幸运数
  19. }
  20. j = 1;
  21. }while(temp<n);
  22. int count = 0;
  23. for(int i=1;i<n;i++){
  24. if(num[i]>=n)
  25. break;
  26. if(num[i]>m)
  27. count++;
  28. }
  29. cout<<count<<endl;
  30. return 0;
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/929753
推荐阅读
相关标签
  

闽ICP备14008679号