美元汇率【贪心算法练习题】

简介: 题目链接:http://tyvj.cn/p/1095https://www.luogu.org/problem/show?pid=1968描述在以后的若干天里戴维将学习美元与德国马克的汇率。编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值。

题目链接:

http://tyvj.cn/p/1095

https://www.luogu.org/problem/show?pid=1968

描述

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

输入格式

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

输出格式

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

测试样例1

输入

5
400
300
500
300
250

输出

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 美元

 

解题思路(http://tyvj.cn/Solution/6521)

 AC代码:

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     int i,n;
 5     double a[3],sum;
 6     scanf("%d",&n);
 7     sum = 100;
 8     scanf("%lf%lf",&a[0],&a[1]);
 9     for (i=0;i<n-1;i++)
10     {
11         if (a[0] > a[1])
12             sum *= (double)a[0]/a[1];
13         scanf("%lf",&a[2]);
14         a[0]=a[1];
15         a[1]=a[2];
16     }
17     printf("%.2lf\n",sum);
18     return 0;
19 }

可以参考阅读的代码(一):

 1 #include <stdio.h>
 2 #define max_data 100
 3 int main(void)
 4 {
 5     int i;
 6     int n;
 7     int a[max_data];
 8     double sum;
 9     scanf("%d",&n);
10 
11     for (i = 0;i < n;++i)
12         scanf("%d",a + i);
13     sum = 100;
14 
15     for (i = 0;i < n - 1;++i)
16         if (a[i] > a[i + 1])
17             sum *= (double) a[i] / a[i + 1];
18 
19     printf("%.2lf\n",sum);
20 
21     return 0;
22 }

可以参考阅读的代码(二):

 来源:http://blog.csdn.net/wxf1995/article/details/6007723#

 1     #include<stdio.h>  
 2     #include<iostream>  
 3     using namespace std;  
 4     const int N=100;  
 5     double ans[N+1][2];//0维表示美元 1维表示马克   
 6     double num[N+1];//num[i]的马克可以在第i天换100美元   
 7     int n;  
 8     void input()  
 9     {  
10         scanf("%d",&n);  
11         for (int i=1;i<=n;i++)  
12         {  
13             scanf("%lf",&num[i]);  
14         }  
15         return;  
16     }  
17     void prime()  
18     {  
19         ans[0][0]=100.0;  
20         for (int i=1;i<=n;i++)  
21         {  
22             ans[i][0]=ans[i-1][0];  
23             ans[i][1]=ans[i-1][1];  
24             for (int j=1;j<i;j++)  
25             {  
26                 ans[i][0]=max(ans[j][1]/num[i]*100.0,ans[i][0]);//换成美元   
27             }  
28             for (int j=0;j<i;j++)  
29             {  
30                 ans[i][1]=max(ans[j][0]*num[i]/100.0,ans[i][1]);//换成马克  
31             }  
32         }  
33         printf("%.2lf",ans[n][0]);  
34         return;  
35     }  
36     int main()  
37     {  
38         input();  
39         prime();  
40         return 0;  
41     }  

本代码解析:

每一天所能拥有的最大的价值肯定要么是全马克,要么全是美元(不解释)

所以可以记录第i天所能拥有的最大马克数和美元数,来递推

ans[i][1]表示第i天所能拥有的最多的马克

ans[i][0]表示第i天所能拥有的最多的美元

自然

ans[i][1]=ans[i-1][1];

ans[i][1]=max(ans[j][0]*num[i]/100.0,ans[i][1]);//换成马克

ans[i][0]也同理

 

 

相关文章
|
存储 SQL 算法
八个理由:从java8升级到Java17
八个理由:从java8升级到Java17
428 0
|
弹性计算 tengine 负载均衡
云原生 - 负载均衡(SLB)配置 HTTPS 访问设置
云原生 - 负载均衡(SLB)配置 HTTPS 访问设置
2437 0
云原生 - 负载均衡(SLB)配置 HTTPS 访问设置
|
5月前
|
XML Java C#
一个 Bean 就这样走完了它的一生之 Bean 的出生
想了解 Spring 中 Bean 的销毁流程么?本文将从 Spring 源码的角度带你一步一步查看 Spring 中的 Bean 销毁时候生命周期的每个方法是如何被调用的。
117 15
|
4月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 5 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
12月前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
1591 1
|
SQL 存储 关系型数据库
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!(下)
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!
1404 2
如何关闭智能键盘IQKeyboardManager
如何关闭智能键盘IQKeyboardManager
362 1
|
编译器 开发工具 C语言
vscode安装+配置+使用+调试【保姆级教程】
vscode安装+配置+使用+调试【保姆级教程】
55604 8
|
Android开发
Android 数据传递的几种方式,HttpLoggingInterceptor消息拦截器
Android 数据传递的几种方式,HttpLoggingInterceptor消息拦截器
|
Linux 调度 KVM
KVM详解(一)——KVM基础知识
KVM详解(一)——KVM基础知识
807 0