最近在学习嵌入式,在网上逛的时候看到一道面试题目,题目如下
编程题:s = 1 + 2 – 3 + 4 – 5 + 6 – 7 ......n
请编写一个函数,传入参数 n ,返回 s 的值。
我简单的做了下,用了四种方法实现了求解.可能做得不好 还请见谅,如果更好的方法请在给予斧正。
调用方法 : ./09 10
《环境 linux (ubuntu 9.10) 编译器 gcc 版本 4.4.1》
题目不是很难 但是要考虑运行效率,在这些这些算法中第三种效率最高
/*
by 龍魂 email : evilkingsoul@gmail.com qq:278563291
*/
#include <stdlib.h>
#include <stdio.h>
// 第一种解法
int sum_1(int n)
{
int sum;
int i;
sum=1;
for(i=2;i<=n;i++)
{
if(i%2==0)
{
sum=sum+i;
}
else
{
sum=sum-i;
}
}
return sum;
}
//第二种解法
int sum_2(long n)
{
int flag=1;
long sum=1;
long i;
for(i=2;i<=n;i++)
{
sum+=flag*i;
flag=flag*(-1);
}
return sum;
}
/**/ //第三种解法
int sum_3(long n)
{
if(n<=0)
{
printf("error:n must>0");
exit(0);
}
if(n%2==0)
return n/2+2;
else
return -n/2+1;
}
// 第三种解法
int sum_4(int n)
{
char str[n];
int i;
int sum=0;
str[0]=1;
for(i=1;i<n;i++)
{
if(i%2==1)
str[i]=i+1;
else
str[i]=-(i+1);
}
for(i=0;i<n;i++)
{
sum+=str[i];
}
return sum;
}
int main(int argc,char *argv[])
{
int i;
i=atoi(argv[1]);
printf("第一种解法:%d \n",sum_1(i));
printf("第二种解法:%d \n",sum_2(i));
printf("第三种解法:%d \n",sum_3(i));
printf("第四种解法:%d \n",sum_4(i));
printf("\n");
return 0;
}
#include <stdio.h>
// 第一种解法
int sum_1(int n)
{
int sum;
int i;
sum=1;
for(i=2;i<=n;i++)
{
if(i%2==0)
{
sum=sum+i;
}
else
{
sum=sum-i;
}
}
return sum;
}
//第二种解法
int sum_2(long n)
{
int flag=1;
long sum=1;
long i;
for(i=2;i<=n;i++)
{
sum+=flag*i;
flag=flag*(-1);
}
return sum;
}
/**/ //第三种解法
int sum_3(long n)
{
if(n<=0)
{
printf("error:n must>0");
exit(0);
}
if(n%2==0)
return n/2+2;
else
return -n/2+1;
}
// 第三种解法
int sum_4(int n)
{
char str[n];
int i;
int sum=0;
str[0]=1;
for(i=1;i<n;i++)
{
if(i%2==1)
str[i]=i+1;
else
str[i]=-(i+1);
}
for(i=0;i<n;i++)
{
sum+=str[i];
}
return sum;
}
int main(int argc,char *argv[])
{
int i;
i=atoi(argv[1]);
printf("第一种解法:%d \n",sum_1(i));
printf("第二种解法:%d \n",sum_2(i));
printf("第三种解法:%d \n",sum_3(i));
printf("第四种解法:%d \n",sum_4(i));
printf("\n");
return 0;
}
转载于:https://blog.51cto.com/foxhack/270190