美元汇率【贪心算法练习题】
题目链接:
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 1003 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]也同理
美元汇率【贪心算法练习题】相关推荐
- python【蓝桥杯vip练习题库】BASIC-19完美的代价(贪心算法)
试题 基础练习 完美的代价 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串, ...
- 美元汇率问题 酒馆浪人的博客
1251: 美元汇率(dollars) 时间限制: 1 Sec 内存限制: 128 MB 提交: 16 解决: 7 [ 提交][ 状态][ 讨论版] 题目描述 在以后的若干天里戴维将学习美元与 ...
- 暑期集训2:ACM基础算法 练习题C:CF-1008A
2018学校暑期集训第二天--ACM基础算法 练习题A -- CodeForces - 1008A Romaji Vitya has just started learning Berlanes ...
- 野生前端的数据结构练习(12)贪心算法
参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/GreedyAlogrithm 一.贪心算法 贪心算法属于比较简单的 ...
- 贪心算法+回溯算法+动态规划
一.贪心算法 1.分饼干问题 #思路:排序加贪心 先让胃口小的孩子满足 class Solution:def findContentChildren(self, g, s):print('==g:', ...
- 任务分配算法c语言程序,程序员算法基础——贪心算法
原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...
- LeetCode:贪心算法(30道经典题目)
LeetCode:贪心算法 求解最优化的问题常常会有一系列的步骤,而每个步骤往往会面临着选择.贪心算法在每一步都做出最优解,寄希望于通过局部最优解来获得全局最优解.贪心算法往往是这种自顶向下的设计,先 ...
- 贪心算法(Greedy Algorithms)
1.贪心法的设计思想 贪心算法在解决问题的策略上目光短浅, 只根据当前已有的信息就做出选择,而且 一旦做出了选择,不管将来有什么结果,这个选择都不会改变.换言之,贪心法并不是从整体最优考虑,它所做出的 ...
- Leetcode学习之贪心算法
贪心算法理论基础 题目分类大纲如下: 什么是贪心 贪心的本质是选择每一阶段的局部最优,从而达到全局最优. 这么说有点抽象,来举一个例子: 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎 ...
最新文章
- 人脸对齐--Face Alignment by Explicit Shape Regression
- 人工智能产业发展联盟公布首轮AI芯片基准评测结果,评估工具已开源
- Android的Recovery中font_10x10.h字库文件制作
- SAP S/4HANA Material 物料主数据的简单介绍
- sh(Spring+Spring mvc+hibernate)——BaseDao.java
- async和await理解代码
- pandas插入新列
- DNA序列 LOJ NOIP模拟赛 D1T1 字符串哈希
- 一次解决Linux内核内存泄漏实战全过程
- Java实现国密电子签章(itext+bouncycastle +sm3withsm2)
- 面试必问——你有什么问题问我吗
- R语言使用cor.test函数检验两个数值向量之间的相关性系数是否具有统计显著性、对相关性系数进行显著性检验、基于pearson相关性检验
- 设计的银行账户管理系统,增加一个VIP账户的管理
- 计算机无法识别出硬件,电脑检测不到硬盘,电脑硬件故障检测工具
- 【100%通过率】华为OD机试真题 Python 实现【整理扑克牌】【2022.11 Q4 新题】
- 大b和小b的区别是什么
- Android解析xml文件获取数据练习
- 又一个电商商城推荐【附源码】
- 商务社交网站在中国还有没有机会
- 【MATLAB】MATLAB快速入门编程技巧