程式設計題:X星人的金幣
阿新 • • 發佈:2021-10-23
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\)
程式碼如下:
heroes never die!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)))