股神問題 - 有股神嗎? 有, 小賽就是!

題目描述
									

有股神嗎?

有,小賽就是!

經過嚴密的計算,小賽買了一支股票,他知道從他買股票的那天開始,股票會有以下變化:第一天不變,以後漲一天,跌一天,漲兩天,跌一天,漲三天,跌一天...依此類推。

爲方便計算,假設每次漲和跌皆爲1,股票初始單價也爲1,請計算買股票的第n天每股股票值多少錢?

輸入

輸入包括多組數據;

每行輸入一個n,1<=n<=10^9 。

樣例輸入

1

2

3

4

5

輸出

請輸出他每股股票多少錢,對於每組數據,輸出一行。

樣例輸出

1

2

1

2

3




結題思路:
1. 先求出下跌的次數;
2. 求除“最後一次下跌以及其後面的所有漲的天數之外”的前面漲跌之後的價格;
3. 找出最後一次下跌以後,漲的天數;
4. 求所有的價格

代碼:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>




int getValue(int d)
{
        int j = 2;
        int i = 0;//記錄下跌天數
        int k=d;
        int sum = 2;
        int s = 2;//實際上是從第三天開始計算,此處2代表前兩天


int cu = 0;
        
        while(k>j){//算出跌的天數
                i++;
                k-=j;
                j++;
        }
       


        for(int p=0; p<i-1; p++){//計算除最後一次跌以及之後的漲之外,所有漲的價格
                
                sum+=s;
sum-=1;
                s++;//出最後一輪外,從本次跌到下一次跌之前的天數,次後輪

        }
       


for(int z=2; z<=s; z++){
cu += z;
}

        k = d - cu;//不包含最後一次跌
        
        sum += (k-2);//k加上最後一輪漲的k-1天,減掉跌的1天
        
        return sum;
}




int main(int argc, char* argv[])
{
        int n;
        scanf("%d", &n);
  
        printf("%d\n", getValue(n));
  
}

/*代碼有點多,看到有一些大神幾行就解決了,但沒看懂,純粹自己理解,有更簡潔的代碼還望共享一下*/
發佈了33 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章