主题:[讨论]有兴趣的朋友过来看看!! 呵呵
751536189
[专家分:0] 发布于 2010-06-23 10:40:00
1-2+3-4+5-6+7......+n
有学过的C语言,编写出来,尽可能简单明了!!!
注意简单明了:(程序越简单越好)
做成这个程序其实用不了多长时间,希望各位朋友!
帮忙解决一下! 谢了.......
回复列表 (共15个回复)
沙发
bruceteen [专家分:42660] 发布于 2010-06-23 19:13:00
if( n是单数 ) return (n+1)/2;
if( n是偶数 ) return -n/2;
板凳
niitgongl [专家分:20] 发布于 2010-06-24 14:39:00
#include<stdio.h>
#include<math.h>
main()
{
int n,i=1,s=0;
printf("请输入n。\n");
scanf("%d",&n);
while(i<=n)
{
s=s+i*pow(-1,i+1);
i++;
}
printf("当n=%d时/n算式结果为:%d",n,s);
}
我也初学,敬请指导!
3 楼
751536189 [专家分:0] 发布于 2010-06-24 19:10:00
这个题,我现在会了,我给你们写下来吧!!! 呵呵
#include <stdio.h>
void main()
{int i,j,n,s1,s2,s;
for(i=1;i<=n;i++)
{if(n%i==0)s1=s1-i;}
for(j=2;j<=n;j++)
{if(n%j!=0)s2=s2+j;}
s=s1+s2;
printf("%d“s);
}
这个程序不知道有没有错误,如果有错误请朋友们,帮忙改改!!! 呵呵
4 楼
雪光风剑 [专家分:27190] 发布于 2010-06-24 21:28:00
ls两位,如果注重代码效率的话,你们的代码显然是不如bt同学的代码的,相信原因大家都明白
lz自己的代码,算法我没看明白……请稍作解释可以吗?而且从算法上看,这个算法无疑是非常不成功的,虽然没有改变问题的计算量级,却确实地增长了算法的迭代次数
5 楼
拐角的认识 [专家分:0] 发布于 2010-06-24 21:52:00
#include<stdio.h>
int main()
{
int n=1,i;
printf(enter i:);
scanf("%d",%i);
while(i!=0)
n++;
if(n%2==0)
return -n/2;
if(n%2!=0)
return (n+1)/2;
}
应该是这样了
6 楼
雪光风剑 [专家分:27190] 发布于 2010-06-24 22:08:00
[quote]#include<stdio.h>
int main()
{
int n=1,i;
printf(enter i:);
scanf("%d",%i);
while(i!=0)
n++;
if(n%2==0)
return -n/2;
if(n%2!=0)
return (n+1)/2;
}
应该是这样了[/quote]
这位同学的程序严重有问题
首先scanf的参数表,从参数2开始应该是地址,怎么是%i呢?
其次,已经输入了i,还要n干吗……
第三,主函数不输出,return的东西给谁呢?
7 楼
senluo [专家分:10] 发布于 2010-06-24 23:28:00
bt同学的我还没看懂,风剑能不能解说一下?
这是我的,没考虑算法问题。新人,第一天进来。
另外,LZ的void main是被飞燕mm BS了很多的谭派后遗症,得改改~
code
#include<stdio.h>
#include<math.h>
int main()
{
int sum = 0,j = 1,n;
printf("Input the number n:\n");
scanf("%d",&n);
for(j=1;j<=n;j++)
{
if(!(j%2))
{
sum += j;
}
else
{
sum -= j;
}
}
printf("The outcome number is %d",sum);
getch();
return 0;
}
8 楼
elst5523183 [专家分:210] 发布于 2010-06-25 07:16:00
1-2+3-4+5...-n
if n是偶数:
共用n个数字,可看成 (1-2)+(3-4)+...((n-1)-n), 有n/2对的-1, 因此-1*(n/2)
1-2+3-4+5....+n
if n是奇数, 可看成 (-0+1)+(-2+3)+...(-(n-1)+n),共有n+1个数字,有(n+1)/2对 1,因此1*(n+1)/2
9 楼
雪光风剑 [专家分:27190] 发布于 2010-06-25 08:01:00
if(!(j%2))
{
sum += j;
}
else
{
sum -= j;
}
形如这样的判断,其实真的可以写成sum+=(j%2)?j:-j;
10 楼
alweeq86 [专家分:1170] 发布于 2010-06-25 08:42:00
[code=c]
int main(void)
{
int flag=1;//用于符号转换
int total=0;
for (int i=1; i<=N; i++)
{
total+=i*flag;
flag*=-1;
}
return 0;
}[/code]
我感觉LZ可能要的是这个 不是想要你们精简高效的算法
我来回复