zoukankan      html  css  js  c++  java
  • P1968

    题目背景
    此处省略maxint+1个数

    题目描述
    在以后的若干天里戴维将学习美元与德国马克的汇率。编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值。

    输入输出格式
    输入格式:
    输入文件的第一行是一个自然数N,1≤N≤100,表示戴维学习汇率的天数。

    接下来的N行中每行是一个自然数A,1≤A≤1000。第i+1行的A表示预先知道的第i+1天的平均汇率,在这一天中,戴维既能用100美元买A马克也能用A马克购买100美元。

    输出格式:
    输出文件的第一行也是唯一的一行应输出要求的钱数(单位为美元,保留两位小数)。

    注意:考虑到实数算术运算中进位的误差,结果在正确结果0.05美元范围内的被认为是正确的,戴维必须在最后一天结束之前将他的钱都换成美元。

    输入输出样例
    输入样例#1: 复制
    5
    400
    300
    500
    300
    250
    输出样例#1: 复制
    266.67
    说明
    样例解释 (无需输出)

    Day 1 ... changing 100.0000 美元= 400.0000 马克
    Day 2 ... changing 400.0000 马克= 133.3333 美元
    Day 3 ... changing 133.3333 美元= 666.6666 马克
    Day 5 ... changing 666.6666 马克= 266.6666 美元
    update:2017/08/18: 1样例正确答案为266.67

    2已经把测试点1改成样例

    3spj原先误差是0.01,按照题目要求,重新改为0.05

    #include<iostream>
    #include<cstdio>
    #define N 1000045
    using namespace std;
    
    void read(int &s){
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar());
        for(s=0;isdigit(ch);s=s*10+ch-'0',ch=getchar());
    }
    
    int n;
    int hui[N];
    
    int main(){
        read(n);
        double dp1,dp2,now;dp1=100.0,dp2=0.0;
        for(int i=1;i<=n;++i)read(hui[i]);
        for(int i=1;i<=n;++i){
            dp1=max(dp1,dp2/hui[i]*100.0);
            dp2=max(dp2,dp1*hui[i]/100.0);
        }
        printf("%.2lf",dp1);
        return 0;
    }
    
  • 相关阅读:
    SQL注入方法之:获取列名
    手把手教会你模拟退火算法
    我的G++编译选项
    编译器优化误解程序员的意思
    ZKW线段树
    扩展欧几里得算法
    快速幂
    乘法取模
    莫队算法良心讲解
    高精度模板
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/8321165.html
Copyright © 2011-2022 走看看