題目傳送門
description
又到了毛學姐**學渣的時候了,學渣根據實力不同從 lv1 依次向上提公升,毛學姐每**乙個學渣就會不斷地提公升自己的實力,從而挑戰更高等級的學渣,他按照這樣的方式**學渣:1,1,2,1,1,1,3,1,1,1,1,4,1,1,1,1,1,5…1,1,2,1,1,1,3,1,1,1,1,4,1,1,1,1,1,5… 第一二天他**2個lv1的學渣,然後第三天能夠**乙個lv2的學渣,接下來,毛學姐再殺3個lv1的學渣【為了恢復體力】,然後殺死乙個lv3的學渣,如此往復。但是毛學姐數學不好,殺著殺著就忘了今天該輪到等級多少的學渣了,請你幫他計算一下。
input
有多組測試樣例。輸入乙個正整數數nn,代表要殺的第nn個學渣。(0output
輸出第nn個學渣的等級
sample input 1118
sample output 115
題解
這個題剛剛看起來很簡單,ac的辦法有很多,但當真正寫起**之後才會發現事情並非想象的那麼簡單。 我做這個題的時候先用了一些最淺的規律(每個高階學渣前都有乙個與等級數量相等的一級學渣),但提交**後顯示超時,無奈,我只好換了一種思路,用等差數列前n項和的求和公式(通過觀察可以發現,112 1113 11114 111115… …就是乙個首項為3,公差為1的等差數列),很不幸,新的思路再一次因超時而被否決。於是我採用了最笨的方法:暴力打表(將毛學姐**的前100000個學渣以陣列的形式列出來)多次調整之後終於ac。下面先看ac**。
#includeint main()
{ int n,m=2,n,x=0;
int l[110090];//①
while(m<450)//②
{for(n=0;n注釋
①:這個數是根據下面的注釋②隨機取的,為保證②成立的隨機數。
②:剛開始我取的數是320(對100000開根號後取了乙個稍大的數),提交後顯示wa,而後就往上隨機取數直到ac。之後問大佬才知道這個數是448,下面是原理:
s=0a=3while(s<100000):
s=s+a
a=a+1
print(a)
(s表示的是天數,a表示的是非1的等級) 毛學姐大戰學渣()
毛學姐大戰學渣 描述在毛學姐打完殭屍後,終於知道了和平生活的來之不易,於是他決定好好學習 回報社會。在經過長時間的學習後,毛學姐終於成為一名合格的學霸。可是毛 學姐還想提高自己於是 又到了毛學姐 學渣的時候了,學渣根據實力不同從 lv1 依次向上提公升,毛 學姐每 乙個學渣就會不斷地提公升自己的實力...
毛學姐大戰學渣
description 又到了毛學姐 學渣的時候了,學渣根據實力不同從 lv1 依次向上提公升,毛學姐每 乙個學渣就會不斷地提公升自己的實力,從而挑戰更高等級的學渣,他按照這樣的方式 學渣 1,1,2,1,1,1,3,1,1,1,1,4,1,1,1,1,1,5 第一二天他 2個lv1的學渣,然後第三...
毛學姐大戰學渣 建立陣列
description 又到了毛學姐 學渣的時候了,學渣根據實力不同從 lv1 依次向上提公升,毛學姐每 乙個學渣就會不斷地提公升自己的實力,從而挑戰更高等級的學渣,他按照這樣的方式 學渣 1,1,2,1,1,1,3,1,1,1,1,4,1,1,1,1,1,5 第一二天他 2個lv1的學渣,然後第三...