oj1344题求和:对于正整数n,k,我们定义这样一个函数f,它满足如下规律:······现在给出n和k,你的任务就是要计算f(n,k)的值。

oj1344题求和原题:分析即实现

原题:

oj1344题求和:对于正整数n,k,我们定义这样一个函数f,它满足如下规律:······现在给出n和k,你的任务就是要计算f(n,k)的值。

分析即实现

这是一道数学题,我们很容易想到,只要找到了这个函数的解析式,这个问题便可以迎刃而解,加上计算机强大的计算能力,该题应当是可以很快完成计算的,然后可以观察这个式子,得到an的表达式:
oj1344题求和:对于正整数n,k,我们定义这样一个函数f,它满足如下规律:······现在给出n和k,你的任务就是要计算f(n,k)的值。
然后逐项叠加,于是我们便有了以下解法:

#include <iostream>
#include <cmath>
using namespace std;

long long solve(long long n,long long k)
{
long long num=0;
for (long long i=1;i<=n;i++)
num+=pow(-1,(i-1)/k+1)*i;
return num;
}
int main()
{
int T;
cin >> T;
long long n;
long long k;
while(T--)
{
cin >> n >> k;
cout << solve(n,k) << endl;
}
return 0;
}

可惜的是,oj报不通过,超时了,想想也是,pow()函数会花费不少的时间,于是我便思考如何消掉这个pow()函数,于是最终写出来以下代码:

#include <iostream>
using namespace std;

long long solve(long long n,long long k)
{
long long num=0;
for(long long i=1;i<=n;i++)
{
if (((i-1)/k+1)%2!=0)
num+=(-i);
else
num+=i;
}
return num;
}
int main()
{
int T;
cin >> T;
long long n,k;
while(T--)
{
cin >> n >> k;
cout << solve(n,k) << endl;
}
return 0;
}

该方法的思想和第一种是一样的,但是消掉了pow函数,心想这次一定可以通过了,奈何再次爆出超时警告,噗,心累啊!怎么办?再想想,能不能换一种方法。
第三种方法:
可以将k看成一个小周期,2k看成一个大周期,那n/2k就表示大周期的个数,每个大周期的值很容易知道是k*k,那么我们很容易知道前面这个部分的值就是n/2k * k^2,再加上后面多出的部分就是结果,于是我又可以写出一个代码:

#include <iostream>
using namespace std;

long long solve(long long n,long long k)
{
long long x=n/(2*k)*k*k;
long long a=n%(2*k),b=n-a+1;
if (n%(2*k)==0)
return x;
else if (a/(k+1)==0)
{
for (long long i=b;i<=n;i++)
x+=(-i);
return x;
}
else
{
for (long long i=b;i<b+k;i++)
x+=(-i);
for (long long i=b+k;i<=n;i++)
x+=i;
return x;
}
}
int main()
{
int T;
cin >> T;
long long n;
long long k;
while(T--)
{
cin >> n >> k;
cout << solve(n,k) << endl;
}
return 0;
}

哈哈,终于通过了!
小提示:
在做这个题的时候,我最开始用int定义,最后发现越界,所以大家在写oj时千万要注意使用long long哦!
ps:
这三个代码经过测试,都是正确的,但是在oj上跑的话,1和2都超时了,只有3可以完美通过。
如果对你有帮助的话,不妨点个赞再走呗!

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

oj1344题求和:对于正整数n,k,我们定义这样一个函数f,它满足如下规律:······现在给出n和k,你的任务就是要计算f(n,k)的值。

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » oj1344题求和:对于正整数n,k,我们定义这样一个函数f,它满足如下规律:······现在给出n和k,你的任务就是要计算f(n,k)的值。
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏