废话不多说我们先上图
当时看到这题
Z字形还要模拟
就觉得很麻烦
直到我发现篮圈圈住的是等差数列前n项和才有了转机
蓝圈是这一斜列最大的数,既然是Z字形按照他每一斜列都比前一列多一个数
那就证明他这一列最大的数是公差为1首项为1的等差数列前n项和
这样我们就能判断我们要的这个数他在哪一个蓝圈数字的那一行
之后有了蓝圈数字
我在篮圈数字边上写的1357跟2468便是这一行也就是算出来的X
之后我们再看看这个表格中每一个数字比如1/2, 2/2
这不就是代表着第一行第二列,第二行第二列么
所以有了蓝圈知道了起点只需要用蓝圈的数字减去n得到的t
如果是奇数则蓝圈是1 / X; 我们要的数字则是1 + t / X - t
偶数也是一样的道理
代码如下:
这里用f -> final 代表X(因为大小写太麻烦了我懒得按caps look)
至此本题结束,就算了几个数这程序应该很快吧= =,欢迎指正,这是我第一次发文章,谢谢