例如n=8,m=2,数列就是-1,-2,3,4,-5,-6,7,8
而n=4,m=1,数列就是-1,2,-3,4
现在让你算算前n项和为多少
C语言解决:
#include<stdio.h>
int main()
{
int n,m;
int sum=0;
int flag=-1;
scanf("%d %d",&n,&m);
assert(n%(2*m)==0);
for(int i=1;i<=n;i++)
{
sum+=i*flag;
if(i%m==0)
{
flag=-flag;
}
}
printf("%d",sum);
return 0;
}
但是这样的效率还不够好,所以我们可以采用数学办法.
并且因为数据过大int型会越界,所以将int型改为了无符号的长长整形
C语言代码如下:
#include<stdio.h>
int main()
{
unsigned long long n,m;
scanf("%lld %lld",n,m);
assert(n%(2*m)==0)
printf("%lld",m*(n/2));
return 0;
}