解题思路:

为什莫这么做就不多说了,前面的大佬们已经解释过了;这里来说说具体是怎么的到东东每次所报的数(因为我觉得前面大佬说的不算清楚):

例如:n=3,k=13,T=3的时候对应的表如下(带颜色的是东东报的数)

0123456789
124711393117

东东所报的数用  t 表示

第1次:t1=1

第2次:t2=7 --> 7=((1+2+3)+1)%13 --> t2=((1+2+3)+t1)%k

第3次:t2=9 --> 9=((4+5+6)+7)%13 --> t3=((4+5+6)+t2)%k

把1+2+3和4+5+6拿出来说:

1+2+3就是首项a为1公差d为1的等差数的前n项和(n的值为3),首项为1,末项为1+(n-1)*d=1+n-1;

前n项和为(首项+末项)*n/2,即(1+1+n-1)*n/2 = 6;

4+5+6就是首项a为4公差d为1的等差数的前n项和(n的值为3),首项为4,末项为4+(n-1)*d=1+n-1;

前n项和为(首项+末项)*n/2,即(4+4+n-1)*n/2 = 15;


然后把上面的过程完善一下:

东东所报的数用  t 表示

第1次:t1=1

第2次:t2=7 --> 7=((1+2+3)+1)%13 --> t2=((1+2+3)+t1)%k --> t2=((1+1+n-1)*n/2+t1)%k;

第3次:t2=9 --> 9=((4+5+6)+7)%13 --> t3=((4+5+6)+t2)%k --> t2=((4+4+n-1)*n/2+t2)%k;

规律如上;如何衔接每次的结果:

            t就不说了看上面就很容易知道了;

            至于每次的首项和末项:定义一个变量 a 作为首项,初值为1,下次的首项就是a+n(即这个例子中的4),每次累加n就可以找到首项,末项用等差数列公式a1+(n-1)*d = a+n-1(d=1, n是通过键盘输入的);那么首项、末项都知道了,规律如上总结;可以解题了……



不懂留言,谢谢

注意事项:

参考代码:

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
	int n, k, T;
	long long sum = 1, t=1, a=1;
	scanf("%d%d%d", &n, &k, &T);
	for(int i = 1; i < T; ++i)
	{
		t = (((a+a+n-1)*n/2)+t)%k;
		sum += t;
		a += n;
	}
	printf("%lld\n", sum);
	return 0;
}
点赞(48)
 

0.0分

45 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 49 条评论

影随风 5年前 回复TA
我想知道是怎么知道如何得到他报的数的公式的
pxh 5年前 回复TA
为什么不可以用 以0为首项公差为1的等差数列,然后最后加个1就好了
第n位 就是 ( n*(n-1)/2+1 )%k;
thelight 5年前 回复TA
为啥我的一直是14%错误。。。。
天天 5年前 回复TA
@石头怪 t求得是东东第二次的值了,i是从1开始的,应该把第一项的值也加上
石头怪 5年前 回复TA
@石头怪 @zwxzuowen 好,我这试试。3Q3Q ,我用JAVA做的,   我用的都是long 型,但我看你们写的题解    都是用你们这种方法,我也是错误14%,我等改下试试,  我这种思想。。。你感觉有没有错误
zwxdog 5年前 回复TA
@石头怪 我的提交错误一直是14%,改格式后就正确了
zwxdog 5年前 回复TA
@石头怪 你试试把n,k,t用%lld格式输入试试
石头怪 5年前 回复TA
大佬,我想知道 为什么不能直接用 sum+=(1+((i*n)*(1+i*n))/2)%k             sum初值给1
这样的方式计算,就是  
第一次  1
第二次 1+(1+2+3+...+n)%k
第三次 1+(1+2+3+...+2n)%k
第四次 1+(1+2+3+...+3n)%k
  这样做为什么错了、。。   不太明白
咖啡 6年前 回复TA
首项为4 的那个  末项为 4+n-1