目录
题目描述
经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推。
为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?
解题思路
分析得出应该是一个数学问题,列出表格,方便分析:
实际天数 date | 1 2 | 3 4 5 | 6 7 8 9 | 10 11 12 13 14 | 15 16 17 18 19 20 |
当天价格 price | 1 2 | 1 2 3 | 2 3 4 5 | 4 5 6 7 8 | 7 8 9 10 11 12 |
区间 interval | 1 | 2 | 3 | 4 | 5 |
区间价格下限 downPrice | 1 | 1(+0) | 2(+1) | 4(+2) | 7(+3) |
区间价格下限对应实际天数 downDate | 1 | 3(+2) | 6(+3) | 10(+4) | 15(+6) |
得出规律:
- downDate = 1 + 2 + 3 + …… + interval = interval*(interval+1)/2;
- downPrice =1 + 0 + 1 + 2 + 3 + …… + (interval - 2) = (interval^2 -3*interval + 4) /2;
对于第n天,首先判断其属于第几个区间,然后得出该区间的下限天数和下限价格,实际价格为下限价格加上实际天数-下限天数
;
参考解题
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int date = sc.nextInt();
double Interval = Math.floor((Math.pow(8 * date + 1, 0.5) - 1)/2);// 区间
double downDate = Math.floor(Interval*(Interval + 1)/2); // 区间的下限日期
double downPrice = (Math.pow(Interval, 2) - 3*Interval + 4)/2; // 区间的下限价格
System.out.println( (int)(downPrice + (date - downDate)));
}
}