问题1443:【蓝桥杯】【往期试题】数字游戏
标题描述
Kndjz正在和他的同学玩数字游戏。
游戏规则如下:kndjz和他的同学围坐成一圈。Kndjz先说1号。接下来,坐在kndjz左手边的学生将说出下一个数字2。下一个同学将从前一个同学说的数字倒数两个数字,即4。下一个同学要倒数到三,说七。以此类推。
为了不让这个数字太大,kndjz和他的同学们一致认为,当他们心中数到k-1时,下一个数字将从0开始。例如,当k=13时,kndjz和同学报告的前几个数字如下:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
在游戏进行了一段时间后,kndjz想知道到目前为止他所说的所有数字的总和是多少。
样本描述
kndjz的数量依次是1、7、9和17。
数据规模和一致性
1 n,k,T 1,000,000;
投入
输入的第一行包含三个整数n,k,T,其中n和k的含义如上所述,T代表kndjz到目前为止所说的位数。
输出
输出一行,包含一个整数,表示kndjz说出所有数字的和。
样本值输入
3 13 3
抽样输出
17
思考解决问题:
为什么要这样做就不多说了,前面的zgdwt已经解释过了;以下是无私的美女每次报数的方式(因为我觉得之前老板说的不太清楚):
例如,当n=3,k=13,t=3时,对应的表如下(颜色为无私美报告数)
无私的美女报的数字用t表示。
第一次:t1=1
第二次:T2=7-7=((123) 1)-T2=((123) t1)% k
第三次:T2=9-9=((456) 7)-T3=((456) T2)% k
拿出1 2 3和4 5 6说:
1 3为前n项之和(n的值为3),第一项为1,最后一项为1(n-1)* d=1n-1;
第一项n的和为(第一项和最后一项)*n/2,即(1 ^ 1 ^ n-1)* n/2=6;
5 6是算术数的前n项之和,第一项a为4,容差d为1(n的值为3),第一项为4,最后一项为4(n-1)* d=1n-1;
第一项n的和为(第一项和最后一项)*n/2,即(4 ^ 4 ^ n-1)* n/2=15;
然后完善以上流程:
无私的美女报的数字用t表示。
第一次:t1=1
第二次:T2=7-7=((123)1)-T2=((123)t1)% k-T2=((11n-1)* n/2t 1)% k;
第三次:T2=9-9=((456)7)-T3=((456)T2)% k-T2=((44N-1)* N/2t 2)% k;
规律性如上;如何连接每次的结果:
t,别说了。看着就很容易知道。
至于每次的第一项和最后一项:定义一个变量A作为第一项,初始值为1,下一个第一项为N(即本例中的4),每次累加N就可以找到第一项,最后一项为算术级数公式a1 (n-1)*d=a n-1(d=1,N通过键盘输入);然后知道第一项和最后一项,规则总结如上;你可以解决这个问题
参考代码:
#包含cstdio
#包含cstdlib
#包含iostream
#包含cmath
#包含cstring
#包含字符串
#包含算法
#包含功能
使用命名空间标准;
int main()
{
整数n,k,T;
长长和=1,t=1,a=1;
scanf('%d%d%d ',n,k,T);
for(int I=1;I T;(一)
{
t=(((a a n-1)* n/2)t)% k;
总和=t;
a=n;
}
printf('%lldn ',sum);
返回0;
}
好了,今天就到这里!喜欢这篇文章或者觉得对你有帮助的读者可以和身边的朋友分享。如果你是jmdnm,也可以通过私信回复“信息”,获得礼包和开发工具。