题目描述
有股神吗?
有,小赛就是!
经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推。
为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?
输入
输入包括多组数据;
每行输入一个n,1<=n<=10^9 。
输出
请输出他每股股票多少钱,对于每组数据,输出一行。
算法思路:
根据提议,我们通过列出数据,发现,第1天和第2天是不变和+1的关系,从第3天开始,先是减去1天,然后加上2天,后面每次都是减去1天,然后再在原基础上+1天,所以,根据题意去设定变量来控制程序的执行流程。
前2天可以直接确定,从第3天开始,我们定义如下:
定义:
股票和为sum=2;
天数计数器day初始为1;
累加的天数为cnt,初始为1;
#include<iostream>
#include<vector>
using namespace std;
int Result(int m){
int sum = 2;
int day = 2;
int cnt = 1;
if (m == 1){
return 1;
}
else if (m == 2){
return 2;
}
else{
/*
设定的天数为要减天数的前一天,这样每次到减的时候都可以给day++;同时sum--;
如果小于设定的天数m的时候,那么就去执行累加的操作,否则如果大于等于的话就
退出循环;
*/
while (day<m){
sum--;
day++;
if(day<m){
cnt++; //控制要加的次数,每加一次就进行判断
for (int i = 0; i < cnt; i++){
sum++;
day++;
if (day == m){
return sum;
}
}
}
}
return sum;
}
}
int main(){
int n;
cin >> n;
int result = Result(n);
cout << result << endl;
}