参考代码:
#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 人评分
简单的a+b (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:368 |
哥德巴赫曾猜测 (C语言代码)浏览:2563 |
有关字符,字符串的输入输出函数说明浏览:498 |
简单的a+b (C语言代码)浏览:1024 |
IP判断 (C语言代码)浏览:592 |
输入输出格式练习 (C语言代码)浏览:773 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:692 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:1060 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:546 |