算法练习 1:股神

转载自:http://blog.youkuaiyun.com/Julialove102123/article/details/79484315

有股神吗? 
有,小赛就是!

经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不>变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天…依此类推。

为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?

算法分析:

天数1234567...n
涨跌情况0+1-1+1
+1
-1+1...+/-1
股价1212323... 

天数:       1 2 | 3 4 5 | 6 7 8 9 |10 11 12 13 14 | 15 16 17 18 19 20 | 。。。。。。

下跌次数:  0       1          2                  3                          4                                        依次递增,i++

每段个数:  2       3          4                  5                          6                                        依次递增,j++

代码练习:

Python实现:

if __name__=='__main__':  
    while 1:  
        s = raw_input()  
        if s != "":  
            n = int(s) - 1 #第一天价格不变  
            val = 1  
            up = 1  #涨幅度  
            while n >= up + 1:  
                val+= up - 1  
                n-= up + 1  
                up += 1  
            val = val + n  
            print val  

C++实现:

#include <iostream>  
using namespace std;  
  
int GetValue(int n)  
{  
    int i = 0;// i统计遇到了多少次下跌  
    int j = 2;// (第一段天数为2)每个分段的总天数:每次下跌之后上涨的天数,包含已经下跌的那天  
    int k = n;//   
    while (k > j) {  
        i++;  
        k-= j;  
        j++;  
    }  
    return n - i*2;// 跌一次,与直接递增的数列相比,就相当于减2
}  
  
int main()  
{  
    int n;  
    while (cin >> n) {  
        cout << GetValue(n) << endl;  
    }  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值