参考代码:
#include<stdio.h>
int main()
{
int m,n;//定义变量m,n分别为左右端点
scanf("%d %d",&m,&n);//首次输入端点的值以确定下面要定义的数组的大小
int a[n],sum=0;//定义数组a[n],n值已在上一步已经确定。sum为区间(m,n)之间的幸运数个数
for(int i=0;i<=n;++i) a[i]=i;//依次给数组赋予与下标相等的数(亦可全部为1,不为0即可)
for(int i=2;i<n;)//循环剔除非幸运数(将对应的数组值清空,变为0) ,其中i为幸运数
{
int k=i;//定义一个变量k等于循环初始的i值
int x=0;//x为计数器,判断幸运数
for(int j=0;j<=n;++j) //循环剔除非零数组中位数能被幸运数i整除的数
{
if(a[j]!=0) x++;//当数组元素不为0时计数器x加一(为零表示已被剔除)
if(x==i)//如果计数器与幸运数相等即该位数组元素位数能够被幸运数i整除,剔除并将计数器x归零
{
a[j]=0;//清除
x=0;//计数器归零
}
}
for(int j=i+1;j<n;++j) if(a[j]!=0)//判断新产生的幸运数i,即当前幸运数的下一个非零数组元素
{
i=j;//令i等于新产生的幸运数
break;//跳出循环防止幸运数后移
}
if(i==k) break;//如果新产生的i与原来的i(K)相等,则表示程序陷入死循环,强制跳出循环
}
for(int i=m+1;i<n;++i) if(a[i]!=0) sum++;//当剔除完成后继续循环找出区间(m,n)之间的幸运数个数
printf("%d",sum);//输出结果
return 0;//程序结束
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复