本人看了下其他同志代碼,覺得我哦的思路簡介
【題目描述】
國王將金幣作為工資,發放給忠誠的騎士。第1天,騎士收到一枚金幣;之后兩天(第2天和第3天)里,每天收到兩枚金幣;之后三天(第4、5、6天)里,每天收到三枚金幣;之后四天(第7、8、9、10天)里,每天收到四枚金幣……這種工資發放模式會一直這樣延續下去:當連續n天每天收到n枚金幣后,騎士會在之后的連續n+1天里,每天收到n+1枚金幣(n為任意正整數)。
你需要編寫一個程序,確定從第一天開始的給定天數內,騎士一共獲得了多少金幣。
【輸入】
一個整數(范圍1到10000),表示天數。
【輸出】
騎士獲得的金幣數。
【輸入樣例】
6
【輸出樣例】
14
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int h=0;//記錄前一個i
int l = 1 , i , sum = 0;
for( i=1;i<=n;i+=l)//這個過程請讀者帶數運行以下就理解了
{
sum+=l*(i-h);//總的金幣相加
l++;//下一次給的金幣數
h=i;//記錄前一個i,(i-h)就課以得到發工資都相同得天數
}
if(i!=n)//如果不相等就說明sum小於真實值,就是不滿足下一個同樣工資得天數!=(i-h)個;
{
sum+=(n-h)*l;//將剩余得加起來;
}
cout<<sum;
}
個人認為這個時間復雜度很小,理解也比較容易;
點個贊吧老哥《0.0》;