最大价格差
题目要求
外汇交易可以通过兑换不同国家的货币以赚取汇率差。比如1美元兑换100日元时购入1000美元,然后等汇率变动到1美元兑换108日元时再卖出,这样就可以赚取(108-100)*1000=8000日元。
现在请将某货币在t时刻的价格R作为输入数据,计算出价格差Rj-Ri(其中i,j为下标,并且j>i)的最大值。
输入示例1
6 5 3 1 3 4 3
输出示例1
3
输入示例2
3 4 3 2
输出示例2
1
输入输出分析:
输入“6 5 3 1 3 4 3”时,输出为3。在“1”时买入,在“4”时卖出,即可获得最大价格差。
虽然之前有5-1=4,但是“5”在“1”之前,不符合题目要求。
用C解决该问题:
#include <stdio.h> #include <stdlib.h> //该问题的本质:把数组中第一个数作为最小值,在下一个最小值来临时,求出两个最小值之间的最大差值maxv //出现的值比前一个最小值还小时,以该最小值开始向后,求第二段区间的最大值maxv //在循环期间,maxv会相互比较求出最大值 int max(int a,int b) { return a>=b?a:b; } int min(int a,int b) { return a<=b?a:b; } int main(int argc, char *argv[]) { int R[200000],n,i; printf("请输入有几个整数:"); scanf("%d",&n); printf("请输入这几个整数(用逗号隔开):\n"); for(i=0;i<n;i++) { scanf("%d",&R[i]); } int maxv=-200000;//选择足够小的数 int minv=R[0]; for(i=1;i<n;i++) { maxv=max(maxv,R[i]-minv);//求出暂时的最大值 minv=min(minv,R[i]);//求出暂时的最小值 } printf("%d",maxv); return 0; }