股神(c++) |
思路:如下图所示:跌落的天数存在规律1,3,6,10 ===》(i + 1)*i / 2,其中i可以用于表示第i次跌落
跌落的天数之间存在规律,满足等差数列,差比为2
所以需要找到离第n天最近的跌落天数,从而找到了i,通过i计算差值,
如:当n=9时,离n最近的跌落的天数是6,i=3,那么第6天和对应的股票差 值就是(i-1)*2=4,最后当天的股票值为6-4=2;
代码如下
#include <stdio.h>
#include <iostream>
#include<vector>
using namespace std;
//跌落的天数存在规律1,3,6,10 ===》(i + 1)*i / 2
//跌落的天数之间存在规律,满足等差数列
int GetValue(int n) {
int ret_value;
int i = 1;//用于记录第n天经历了几次跌落
int twince = 1;//找寻离n天最近的那次跌落是在第几天
while (twince=(i + 1)*i / 2 <= n) {
i++;
}
if (twince == n) {//第n天恰好就是跌落天
return n- (i - 1) * 2;
}
else
return n-(i - 2) * 2;
}
int main(void) {
int n;
while (cin >> n) {
cout << GetValue(n) << endl;
}
return 0;
}