原题链接:蓝桥杯历届试题-数字游戏
第一次写题解,有的地方可能写的不是很明白,大家见谅。
先上代码:
n,k,t = list(map(int,input().split()))
sum = 1
for i in range(1,t):
sum += ((1+n*i)*(n*i)//2+1)%k
print(sum)
不要用模拟!模拟肯定超时!
当数到k-1的时候,下一个数字是0.想想这个和什么很像?
没错,就是进制转换。只不过这道题并不用求完整的进制转换,只需要求出个位就行。
也就是每个人报的数就是当前数字转换成k进制的个位,也就是num%k
那么当前数字该怎么求呢?
观察后不难发现,第i次的当前数字,实际上就是1+1+2+3+…+i-1。
知道数字是多少,下一步该怎么求呢?
不要用循环!循环肯定超时!
等差数列求和公式都学过吧?用就完了。
另外,其他人报的数都没必要算,只关心小明(我忘了叫啥,反正就是那个主人公)报的就行了。而且也不用使用额外变量储存,算出来直接加就完事了!
9.9 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复