赛马网基本算法之一 (股神问题)

题目描述

有股神吗?

有,小赛就是!

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

为方便计算,假设每次涨和跌皆为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;
}





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值