问:小Q定义了一种数列称为翻转数列:给定整数n、m,满足n能被2m整除,对于一串连续递增的整数数列1、2、3、4、5…,每隔m个符号翻转一次,最初的符号为‘-’,例如n=8,m=2,数列则为:-1,-2,+3,+4,-5,-6,+7,+8。
而n=4,m=1,数列则为:-1,+2,-3,+4。小Q现在希望你能帮他算算前n项和为多少。
#include<stdio.h>
#include<assert.h>
int main()
{
int n,m;
int sum = 0;
int flg = -1;
scanf ("%d %d",&n,&m);
assert(n%(2*m)==0);
for(int i=1;i<=n;i++)
{
sum += flg*i;
if(i%m==0)
{
flg*= -1;
}
printf("%d\n",sum);
}
}
此方法时间复杂度太大通过率只有30%
int main()
{
int n,m;
scanf ("%d %d",&n,&m);
assert(n%(2*m)==0);
printf("%d\n",m*(n/2));
return 0;
}
本次测试用例未通过,通过率为30%
测试用例:323445962 371
对应输出应该为:59999225951
你的输出为:-130316193
int main()
{
unsigned long long n,m;
scanf ("%lld %lld",&n,&m);
assert(n%(2*m)==0);
printf("%lld\n",m*(n/2));
return 0;
}
成功