國王將金幣作為工資,發(fā)放給忠誠的騎士。第一天,騎士收到一枚金幣;之后兩天(第二天和第三天)里,每天收到兩枚金幣;之后三天(第四、五、六天)里,每天收到三枚金幣;之后四天(第七、八、九、十天)里,每天收到四枚金幣……這種工資發(fā)放模式會(huì)一直這樣延續(xù)下去。當(dāng)連續(xù) n天每天收到 n 枚金幣后,騎士會(huì)在之后的連續(xù) n+1 天里,每天收到 n+1 枚金幣(n 為正整數(shù))。
??請編程確定從第一天開始的給定天數(shù)內(nèi),騎士一共獲得了多少金幣。
【輸入格式】
??輸入包含至少一行,但不多于 1000 行。
??除最后一行外,輸入的每行是一組輸入數(shù)據(jù),包含一個(gè)正整數(shù) n,表示天數(shù)。
??輸入的最后一行為 0,表示輸入結(jié)束。
【輸出格式】
??對每個(gè)數(shù)據(jù)輸出一行一個(gè)整數(shù),表示該數(shù)據(jù)對應(yīng)總金幣數(shù)。
Samples
【數(shù)據(jù)規(guī)模】
??對于 60% 的數(shù)據(jù)滿足:n≤10^3 ;
??對于 80% 的數(shù)據(jù)滿足:n≤10^6 ;
??對于 100% 的數(shù)據(jù)滿足:n≤10^12 。
個(gè)人還是接受不了太長的題目,但是經(jīng)過分析后還是較為簡單的。就是先定義一個(gè)儲(chǔ)存答案的未知數(shù)ans,然后就是第1天每天給一個(gè)金幣,共1^1個(gè)金幣,接下來兩天每天兩個(gè),共2^2個(gè)…………。不難發(fā)現(xiàn),每次增加i^2個(gè)金幣,天數(shù)加i,直到天數(shù)溢出為止,最后在把多的減掉就可以。
代碼如下
#include<bits/stdc++.h>
using namespace std;
int ans,day; //用于儲(chǔ)存答案、天數(shù)
int pas;//已經(jīng)過去的天數(shù)
int ii;
void chs()//初始化
{
ans=0;
pas=0;
return;
}
int main()
{
while(cin>>day)
{
if(day==0)
break; //結(jié)束
chs();
for(int i=1; pas+i<=day; i++)
{
ans+=i*i;
pas+=i;
ii=i;
}
ii++;
ans+=ii*ii;
ans=ans-(pas+ii-day)*ii;
cout<<ans<<endl;
}
return 0;
}
最后只得了80分,數(shù)據(jù)規(guī)模一大就超時(shí)了。
ps:本人第一次寫博客,寫代碼也是菜雞,講解寫的也很模糊,已經(jīng)盡力了 ε=(′ο`*)))唉
浙公網(wǎng)安備 33010602011771號