1. 程式人生 > 其它 >程式設計題:X星人的金幣

程式設計題:X星人的金幣

X星人的金幣

時問限制:3000MS
記憶體限制:589824KB
題目描述:
X是人在一艘海底沉船上發現了很多很多很多金幣。可愛的X星人決定用這些金幣來玩一個填格子的遊戲。其規則如下:第1個格子放2枚金幣,第2個格子放5枚金幣,第3個格子放10枚金幣,第4個格子放17枚金幣,第5個格子放26枚金幣,以此類準,現在X星人—共有N枚金幣,按照上述規則,請問可以放滿多少個格子?還剩多少枚金幣?
輸入描述:
單組輸入。輸入一個正整數N。表示金幣的總數。(N<=10^9)
輸出描述:
輸出按照指定規則可以放滿的格子數量以及剩餘的金幣數量,兩者之間用一個英文空格隔開。

樣例輸入

20

樣例輸出

3 3

題解:

總結規律:
數列: 2 5 10 17 26 ... \(n^{2} +1\)
已知\(a_{n} =n^{2}\)的前n項和:\(S_{n}=\frac{n\left ( n+1 \right ) \left ( 2n+1 \right)}{6}\)
所以\(a_{n} =n^{2} +1\)的前n項和:\(S_{n}=\frac{n\left ( n+1 \right ) \left ( 2n+1 \right)}{6}+n\)

程式碼如下:

N = int(input())
i = 1
sn = lambda n : (n*(n+1)*(2*n+1)/6) + n
while sn(i) < N:
    i = i + 1
print(i-1, int(N-sn(i-1)))
heroes never die!