思路:先利用循环计算出500~800区间内素数个数,并将这些素数一一储存在数组a[cnt]中,再利用插入排序(或其他排序方法)将数组中的素数从“大到小”排序,再利用自定义的递归函数计算出sum。
#include<stdio.h>//需要引入的文件
int f(int a[],int n)//自定义一个递归函数来计算素数其间隔减,加之和sum
{
if(n%2==0)//控制加减符号,因为下面计算出素数个数cnt为44,即sum=a[0]-a[1]+a[2]-a[3]+a[4]-........+a[42]-a[43],可判断出n为偶数时符号为-,例如n=44时,a[43]符号为-。
a[n-1]=-a[n-1];
if(n==1)
return a[0];
else if(n<=0)
return 0;
else
return a[n-1]+f(a,n-1);
}
//以上为自定义函数
int main() { //主函数
int i,j,cnt;
int a[44];
cnt=0;
for(i=500;i<=800;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
break;
}
if(j>=i)
{
cnt++;
a[cnt-1]=i;
}
} //以上代码为计算素数的个数cnt并将这些素数储存在数组a[]中
for(i=1;i<cnt;i++)
{
int flag=a[i];
for(j=i-1;j>=0&&a[j]<flag;j--)
{
a[j+1]=a[j];
}
a[j+1]=flag;
}//以上代码是运用插入排序的方法将数列a[]中的素数从大至小排序
int sum=f(a,cnt);//调用自定义函数计算sum
printf("%d %d",cnt,sum);
return 0;
}
本题涉及循环,排序算法,递归算法,对于我们c语言初学者确实很有帮助。这么写或许有些复杂,但同时能达到复习巩固的作用。