國王將金幣做爲工資,發放給忠誠的騎士。第1天,騎士收到一枚金幣;以後兩天(第2天和第3天)裏,天天收到兩枚金

本人看了下其餘同志代碼,以爲我哦的思路簡介ios

【題目描述】
國王將金幣做爲工資,發放給忠誠的騎士。第1天,騎士收到一枚金幣;以後兩天(第2天和第3天)裏,天天收到兩枚金幣;以後三天(第四、五、6天)裏,天天收到三枚金幣;以後四天(第七、八、九、10天)裏,天天收到四枚金幣……這種工資發放模式會一直這樣延續下去:當連續n天天天收到n枚金幣後,騎士會在以後的連續n+1天裏,天天收到n+1枚金幣(n爲任意正整數)。
你須要編寫一個程序,肯定從第一天開始的給定天數內,騎士一共得到了多少金幣。
【輸入】
一個整數(範圍1到10000),表示天數。
【輸出】
騎士得到的金幣數。
【輸入樣例】
6
【輸出樣例】
14spa

#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;
}

我的認爲這個時間複雜度很小,理解也比較容易;code

點個贊吧老哥《0.0》;ci

相關文章
相關標籤/搜索