赞
踩
题目大意:根据幸运数的条件,不断地将幸运数的倍数删去,留下的就是幸运数。要求的是在某个区间,幸运数的个数。
题目分析:这道题直接模拟删除的步骤,就可以得到一个幸运数的数组,然后在数组中求给定区间上的幸运数的个数即可。
代码解释:首先将2的倍数从数组中刨去,那么num数组中就只剩下1,3,5,7,9,11,13……
然后我取到数组中的第二个数,也就是3,将所有位置是3的倍数的数删掉,也就是将不是3的倍数的数保留下来。
经历了这样一次循环之后,num数组变成了1,3,7,9,13……
然后再取数组中的第三个数7,因此代码中k每次循环过后,自增1,表示这次取下一个幸运数的倍数。
最后取出给定区间上的幸运数的个数即可。
代码展示:
- #include <iostream>
- #include <string.h>
- using namespace std;
-
- int main(){
- int m,n;
- cin>>m>>n;
- int num[n];
- memset(num,0,sizeof(num));
- for(int i=1;i<n;i++)
- num[i] = i*2-1; //先刨去2的倍数
- int temp = 0;
- int k=2;
- int j = 1;
- do{
- temp = num[k++]; //得到当前的幸运数,之后该幸运数的倍数会被删掉
- for(int i=1;i<n;i++){
- if(i%temp!=0)
- num[j++] = num[i]; //保留当前数组中的幸运数
- }
- j = 1;
- }while(temp<n);
- int count = 0;
- for(int i=1;i<n;i++){
- if(num[i]>=n)
- break;
- if(num[i]>m)
- count++;
- }
- cout<<count<<endl;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。