首页 > 试题广场 >

最大收益

[编程题]最大收益
  • 热度指数:523 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
NowCoder最近专注于股票,他准备投资10000元,现在告诉你某一段时间内股票价格的历史数据,在不考虑税收等费用的前提下,请你帮忙计算10000元最多能变成多少元?
注:交易的时间和次数没有限制。

输入描述:
输入有多组数据。每组数据第一行是一个整数n (2≤n≤10),紧接着有n个正整数代表股票价格(假设股票价格都为整数)。


输出描述:
对应每一组数据,输出最初的10000元最多能变成多少元。

结果保留两位小数(四舍五入)。
示例1

输入

5 1 2 3 4 5
5 3 1 2 5 4
4 4 3 2 1

输出

50000.00
50000.00
10000.00
#include <cstdio>
#include <limits.h>
#include <vector>
using namespace std;
int main()
{
 int n;
 while (scanf("%d", &n) != EOF)
 {
  vector<int> stock(n);
  for (int i = 0; i < n; ++i)
  {
   scanf("%d", &stock[i]);
  }
  double max_profit = 10000;
  int min_price = INT_MAX;
  for (int i = 0; i < n - 1; ++i)
  {
   if (stock[i] < stock[i + 1])
    max_profit *= static_cast<double>(stock[i + 1]) / stock[i];
  }
  printf("%.2lf\n", max_profit);
 }
}

发表于 2017-07-22 11:08:48 回复(0)
不通过
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为1.80%

测试用例:
5 1 2 4 3 5

对应输出应该为:

66666.67

你的输出为:

50000.00

求解释~
发表于 2017-05-22 11:45:40 回复(1)
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			int n = sc.nextInt();
			double[] arr = new double[n];
			for (int i = 0; i < n; i ++ )
				arr[i] = sc.nextDouble();
			double money = 10000;
			for (int i = 1; i < arr.length; i ++ )
				money = arr[i] > arr[i - 1] ? money / arr[i - 1] * arr[i] : money;
			System.out.printf("%.2f\n", money);
		}
	}
}

发表于 2016-10-13 18:41:35 回复(0)
10000元初始资金,若股票变化为 2元,6元
则最终收益为30000,10000/2 = 5000 买 5000支价格2的股票,在价格6时候共收益
 (10000/2)*6 = 30000
依此可以得到一组股票获得的收益。
编辑于 2015-11-18 23:19:10 回复(0)
贪心法。从前向后遍历数组,只要当天的价格高于前一天的价格,就算入收益。
// write your code here cpp
#include<iostream>
#include <iomanip>
#include<vector>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        vector<double> data;
        for(int i=0;i<n;++i){
            double temp;
            cin>>temp;
            data.push_back(temp);
        }
        double res = 10000.0;
        for(int i=1;i<n;++i){
            if(data[i]>data[i-1]){
                res = res/data[i-1] * data[i];
            }
        }
        cout<<fixed<<setprecision(2)<<res<<endl;             
    }  
    return 0;
}

发表于 2016-09-02 07:54:27 回复(0)
while True:  try:
        a=list(map(int, input().split()))
        res=10000    for i in range(2,a[0]+1):  if a[i]>a[i-1]:
                res=res/a[i-1]*a[i] print('%.2f'%res) except:  break 

发表于 2018-08-27 17:28:12 回复(0)
// write your code here cpp
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        vector<int> stack(n);
        for(int i=0;i<n;++i)
            cin>>stack[i];
        double res=10000;
        for(int i=1;i<n;++i)
        {
            if(stack[i]>stack[i-1])
                res=res/stack[i-1]*stack[i];
        }
        cout<<fixed<<setprecision(2)<<res<<endl;
    }
    return 0;
}

发表于 2017-11-02 10:19:47 回复(0)
#include <iostream>
#include<vector>
using namespace std;
int main()
{		
	int length;
	double num, pre;
	while (cin >> length)
	{
		double sum = 10000.0;
		vector<double> data;
		vector<int> symbol(length, 1);
		cin >> num;
		data.push_back(num);
		pre = num;
		for (int i = 1; i < length; i++)
		{
			cin >> num;
			data.push_back(num);
			if (num > pre)
				symbol[i] = symbol[i - 1] + 1;
			pre = num;
		}
		int cnt = 0;
		for (int i = 0; i < length;)
		{
			if (symbol[i] != 1)
			{
				int k = i;
				while (i != length && symbol[i] != 1)
					i++;
				sum *= data[i - 1] / data[k - 1];
			}
			else
				i++;
		}
		printf("%.2f\n", sum);
	}
	return 0;
}

发表于 2017-04-27 14:47:21 回复(0)
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cmath>
using namespace std;

double f(int a[], int n){

double sum = 10000;
int label = -1;
for (int i = 0; i < n; i++){
if (a[i] < a[i + 1]){
if (label != -1)
sum = sum / a[label] * a[i];
label = i;

}
else{
if (label != -1)
sum = sum / a[label] * a[i];
label = -1;
}



}


return sum;
}

int  main(){

//ifstream in("input.txt");
//cin.rdbuf(in.rdbuf());
int n;
int a[11];
while (cin >> n){
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
a[n] = a[n - 1];
cout <<fixed<<setprecision(2)<< f(a, n) << endl;

}
return 0;
}
发表于 2015-10-24 16:33:05 回复(0)