好久没做这种题目,有点忘了做的格式,然后就去看了下答案,结果有的是直接公式,我都不知道公式怎么算的。我个人用N的时间复杂度AC了,成就感还是有的。
分析:这个题是有周期性的,每个周期也是定增加的,采用循环(第一天的股价已定,从第2天的时候开始循环),判断这一天是该增加还是该减少,然后得到第N天的股价,具体的操作步骤如下:
1. 股价初始价格为1,所以money初始化为1
2. 计算每个周期有多长,第一个周期为1,初始化stage为1
3. 本周期内已经累加了多少次,times初始化为0
4. 当周期内累加次数大于周期天数的时候,做减一操作,并且初始化下一个周期的天数(stage++),重置累加次数;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int times = 0; // 已加了多少次
int stage = 1;// 加多少次才开始下降
int money = 1; //股价
boolean isAdd = true;// 价格是涨还是跌
for(int i = 2;i<=n;i++){
if(stage > times){
isAdd = true;
}else{
isAdd = false;
}
if(isAdd){
money ++;
times ++;
}else{
money --;
stage ++;
times = 0;
}
}
System.out.println(money);
}
}