1)1093: 验证哥德巴赫猜想(函数专题)
输入一个偶数M (M是6到1000000之间的一个偶数),
输出和等于该偶数的所有素数对a和b,按a递增的顺序输出,(a,b)和(b,a)被视为同一个素数对。
注意设置好主函数中的for循环范围,从3开始是因为3是6的除1外的最小质数因子,到m/2结束是为了防止结果出现17 23和23 17的结果。
for(i=3;i<=m/2;i=i+2)
{
if(prime(i)!=0&&prime(m-i)!=0)
printf("%d %d\n",i,m-i);
}
2)1096水仙花数
求m~n的水仙花数,输出的数中间用空格隔开。
eg:输入 100 120 300 380 输出 no 370 371
注意输入若干组数时用while(scanf("%d %d",&m,&n)!=EOF){ }.
要想输出的数中间有空格并且实现换行,以及确定是否有水仙花数,需要引如flag作为判断的标准。
int main ()
{
int m,n,a,x;//定义数字m和n,以及循环变量a和标志器x
while(scanf("%d %d",&m,&n)!=EOF)//当输入没有截止时
{
x=0;//每次初始化标志器为0
for(a=m;a<=n;a++)//从m到n开始查找
{
if(narcissus(a)&&x==0)//如果标志器初始化状态,并且
printf("%d",a),x++;//这里可以换成下面的语句
/*
{
printf("%d",a);
x++;
}
*/
else if(narcissus(a)&&x)//如果函数返回了1并且标志器非初始化
{
printf(" %d",a);//说明不是第一数字,在前面加空格后再输出
}
}
if(x==0)//如果没找到
{
printf("no");//输出no
}
printf("\n");//每次结束查找,换一次行
}
}
3)1098 已知F(x)=|x-3|+|x+1|,请编写函数funF()
注意这是两个绝对值相加需要考虑x不同的范围对应的不同的F(x)
一定要先化简然后带入求值!!
double funF(double x) //定义funF函数
{
if(x>3)//如果x大于3
return 2*(x-1);//返回的值是2*(x-1)
if(x<-1)//如果x小于-1
return 2*(1-x);//返回化简后的2*(1-x)
if(x<=3&&x>=-1)//如果x的值是-1到3
return 4;//直接返回4
}
4)逆序数字(函数专题)
int inverse(int n)
{
int m,i,j,x=1,sum=0;//m用来储存数字位数,i,j是循环变量,sum即为返回的逆序数字
m=log10(n)+1;//再次解释下,log10(9)=0,但其实位数是1所以+1
for(j=1;j<m;j++)//循环m次,来确定最高位
{
x*=10;//x用来确定n的最高位应该是10的多少次幂
}
for(i=1;i<=m;i++)//循环m次
{
sum+=n%10*x,x/=10,n/=10;//每次将下个数字的倍数/10,每次舍去n的最后一位
}
return sum;//计算并返回n的逆序数字
}