参考代码:

#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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论