1 股神

问题描述:

有股神吗?

有,小赛就是!

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

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

解题思路:

找规律:设 f(n)为第 n 天的股票钱。 由题意知   f(1)=1   f(2)=2     f(3)=1    f(4) =2   f(5)=3  ...  f(6)=2   ...  f(10)=4 .... f(15)=7 ...f(21)=11 ...

标红的是跌的那天股票钱。其实是有规律的。下面来找规律:

我们再定义 g(k)。g(1)=3, g(2)=6, g(3)=10,g(4)=15  ...

再定义u(m)。             u(1)=1,    u(2)=2, u(3)=4,u(4)=7      ...

不难得出  g(k)=3+(k+4)*(k-1)/2  ,      u(m)=1+m*(m-1)/2  。

回归到问题  现在给定 n ,求 f(n)。     我们如果  求出    n1 <= n <n2    其中 n1 和 n2是 n 中  相邻两次的下跌时天数。 即在  n1 至 n2 之间都是上涨的。

现在关键是求 n1 。  知道 n1 ,则  f(n)=f(n1)+n - n1。  现在问题转为求  n1 和 f(n1)。

如果能得到  g(k)<= n <  g(k+1)   则  n1 = g(k)。 因为   根据前面 g(k)的定义 g(k)就是 下跌时 对应的天数。

我们知道了 g(k)表达式  不难求出 k。     再回归到 g(k)和 u(k)的定义(u(m)和u(k)意思一样)  , 有 f ( g(k) ) = u (k) 。

所以知道了k 就同时知道了 n1  和 f(n1) 。 问题解决。

现在为了尽量介绍 k 的迭代次数,用下面方法

(

   g(k)<= n     =》   3+(k+4)*(k-1)/2  <=  n     =》     (k+4)*(k-1)/2 <= n    =》     (k-1)*(k-1)/2 <= n    =》   k<=sqrt(2*n)+1,

  如果 这是 k  的初始值的化  发现程序  输入 n = 9 时  输出  不正确。

  原因是, 这样求出的 初始值K,  有 可能第一次带入  g(k)就有    g(k)>n, 这样是不行的     会出现这种情况  :

g(k)>  g(k1)  > n 。  跳 出 while 循环后  g(k)g(k2)>  g(k1)  > n  (因为跳出循环前  执行了 k++ )  所以当  k -= 2,其实  k = k1,

而我们以为  g(k1)< n  。 所以出现输出错误。

出现这种情况的原因是  求 k的初始值时     当(k-1)*(k-1)/2 <= n    求出的k   有可能  (k-1)*(k-1)/2 <= n  <(k+4)*(k-1)/2 。

如果我们能保证初始 的 k,  使得 (k+4)*(k-1)/2 <  n 。就能避免上述的错误。

求(k+4)*(k-1)/2 <= n    我们求   (k+4)*(k+4)/2 <= n  的 k值 就能满足  要求。

)

下面是代码:

#include<iostream>
#include <cmath>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        if(n<=0)
            continue;
        else if(n==1){
            cout<<1<<endl;
            continue;
        }
        int k=sqrtf(2*n)-4;  //为了减少迭代次数
        if(k<0) k=0;
        int m=0;
        while(m<=n){
            m=3+(k+4)*(k-1)/2;
            k++;
        }
        k-=2;
        m=3+(k+4)*(k-1)/2;
        int i=1+k*(k-1)/2;
        i+=n-m;
        cout<<i<<endl;
    }
    return 0;
}

这种解法比较复杂 。网上有种 简单的解法

代码思路 如下:

public static int Cal2(int n){
        int i = 0;// i统计遇到了多少次下跌
        int j = 2;// 每次下跌之后上涨的天数,包含已经下跌的那天
        int k = n;
        while (k > j) {
            i += 2;
            k -= j;
            ++j;
        }
        return n - i;
    }

2017-09-14

时间: 2024-10-22 16:42:42

1 股神的相关文章

股神小L 2016Vijos省选集训 day1

股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型预测了一支股票接下来n天的价格. 我们把这支股票第i天的价格称为a_i.在接下来n天里,每一天小L可以选择花费a_i买入一股或者卖出一股从而获得a_i元收入. 当然小L卖出股票的时候,自己的账户上必须要有至少一股的剩余.现在小L希望知道,在n天过去之后,采取最优策略的情况下自己最多赚到多少钱. 注意

【编程题】股神

题目链接:股神 题目描述 有股神吗? 有,小赛就是! 经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推. 为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱? 附上本机没问题,但是提交不通过的Java代码....求指教 编译通过了....原来是我用的类名不对,平台要求统一用Main,而我的是Test... 1 import java.util.Sca

私募基金经理刘强:我们该向股神学习什么?

私募基金经理刘强:我们该向股神学习什么? http://finance.qq.com/a/20150501/021302.htm 腾讯财经专访巴菲特:寻找中国好项目 http://finance.qq.com/a/20150502/027508.htm 只投资于简单的看得懂的商业模式,只投资于有护城河的有安全边际的公司,简单加上坚持,巴菲特的淡定尤其值得我们学习.对于我们这些职业投资者来说,缺少的不是发现机会的能力,而是放弃机会的勇气 在尔虞我诈的资本市场里,大家似乎都在拼谁聪明,拼命想占别人便

超级牛散股神叶健颜专找重组题材股,精准买入,不服不行。

昨日,丹甫股份报收13.32元/股.短短三天,一季度突击进入丹甫股份的牛散叶健颜便获利约1748万元.虽然,资本市场对此次交易中牛散精准买入涉嫌内幕交易多有质疑,但丹甫股份董秘办人员却矢口否认. 无独有偶.在万讯自控的交易中,叶健颜以同样的手法出现.今年一季度,叶健颜入手万讯自控359万股.3月初,万讯自控就放出10转5派0.65元的利好消息.但随后,万讯自控便被曝疑似股权激励提前泄密遭资本市场热议.这也佐证了叶健颜现身丹甫股份重组,涉嫌内幕交易的质疑. 叶健颜"敏锐"的嗅觉还体现在参

小股神助A股股民畅享经济发展红利

去年正当全球股市一片哀鸿遍野之时,中国A股市场高歌猛进,于2014年年底顺利攻破四千点指数大关,许多新股民为此也借炒股赚得盆满钵满.而老股民由于受到熊市思维惯性的影响,迟迟不敢踏入股市大门,为此白白错过了本轮A股的饕餮盛宴. 而与之相反,国内许多从未涉足过A股市场的股民,由于看到许多新股民进入股市后完全把股市当成了免费提款机,这些没有炒过股的普通百姓他们有些人也从银行取走存款投入股市也想从A股市场分得一杯羹,而那些没有存款的居民为此只有望股兴叹的份儿了! 不过2015年新年刚过,国内的很多投资机

股神巴菲特给股市新手的8条投资忠告

腾讯证券讯 北京时间11月11日消息,美国著名财经网站Business insidert刊发投资专栏文章,介绍了股神沃伦-巴菲特(Warren Buffett)给股市新手的8条投资忠告.以下为腾讯证券编译内容: "当一个有钱的人遇到一个有经验的人,有经验的人最终有钱,而有钱最终得到经验."现年87岁的巴菲特在今年的致股东信中,劝告投资人买指数基金,而不是投资主动式管理基金 ,也不要投资高费用401k.他说,经验是成为成功投资者的终极法宝. 然而,那些投资新手又该如何?如果你就是没有任何

巴菲特是一代股神!那么Python就是股市的利器!Python真牛逼!

股神巴菲特在面对公众的时候,第一常干的事情是喝可乐卖萌. 1. 基金经理太无能,数据证明没几个基金经理的业绩可以持续超过指数.所以选基金不如直接买指数. 2. 指数定投省时省力,不用在上班的时候还盯着股票.年轻人花更多的时间努力工作提升自己,才是最有价值的投资. 我们定投的方式是,在每月1号,花1000元买入指数. 作为对照组,我们也每月花1000元买入余额宝或其他理财产品.假定余额宝的年化收益是4%. 下面就是具体的Python代码,用来计算两种方式具体的收益. 运行程序后,最终结果如下图:

新浪微博推荐之股神一探究竟,是大神?

1. 打开新浪微博,总是每天给我推荐一个股神,真几把烦,关了还推荐,不知道新浪搞什么飞机,那么我就看看股神什么情况. 反正我是不炒股的,觉的炒股太坑 2. 加上微信,等待中.... 原文地址:https://www.cnblogs.com/429512065qhq/p/12434099.html

民间股神瑞鹤仙经典语录全集

很多人进入市场都以为能大赚.其实这是一个巨大误区,在正常市场中,能赚钱的不过10%-30%.熊市中,能大赚的估计只有1%,赚钱的不超过5%.这就好比考上全国著名高校.有无数的学子无论怎么努力也是考不进去的.这是一个存在却是绝大部分人不愿意承认的现实,因为这相当于自己击碎自己的希望. 同样是职业2年,我认识的一个高手,今年1月份到现在已经获利6倍了,成功的从一个几十万元的小散变成了几百万元的中户.并且他最近也开始做期指,同样也是赚钱的. “要给自己定更高的目标,那些再战杯.挑战杯选手水平都有限.不