代码改变世界

赛码网的股神编程题

2017-09-23 17:18  雄风狂飙  阅读(178)  评论(0)    收藏  举报

题目:

有股神吗?

有,小赛就是!

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

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

 

答案:

#include <iostream>
#include <string>

using namespace std;

long  price(const long& day)
{
    if(day == 1)
      return 1;
  
  long ascDays = 0;
  long descDays = 0;
  
  long tmpday = day - 1;
  long ascPrice = 0;
  long maxAscDay = 0;
  long tmpMaxAscDay = 0;
  long desDay = 0;
  while(true)
  {
      tmpMaxAscDay = 0;
      while(true)
      {
          if( tmpMaxAscDay <= maxAscDay + 1 )
          {
              --tmpday;
              ++tmpMaxAscDay;
              if( tmpday == 0 )
              {
                  //cout<<"111maxAscDay=="<<maxAscDay<<"desDay=="<<desDay<<"tmpMaxAscDay=="<<tmpMaxAscDay<<endl;
                  return 1+(( 1+maxAscDay)*maxAscDay)/2 -desDay + tmpMaxAscDay;
              }
            
             if( tmpMaxAscDay == maxAscDay + 1)
             {
                 ++maxAscDay;  
                 tmpMaxAscDay = 0;
                 break;
             }
          }

     }
    
     --tmpday;
     ++desDay;
     if( tmpday == 0 )
     {
         //cout<<"222maxAscDay=="<<maxAscDay<<"desDay=="<<desDay<<"tmpMaxAscDay=="<<tmpMaxAscDay<<endl;
         return 1+(( 1+maxAscDay)*maxAscDay)/2 -desDay + tmpMaxAscDay;
     }

  }
}

int main()
{
    string strValue = "";
    while(cin>>strValue)
    {
        cout<<price(  atoi( strValue.c_str() )  )<<endl;   
        strValue = "";
    }   
  
    //cout<<"our test"<<endl;
    //strValue="15";
    //long rel = price(  atoi( strValue.c_str() )  );  
  
   //cout<<"rel=="<<rel<<endl;

    return 0;
}

  

说明:
所有测试数据均已输出正确结果!
^_^