最大价格差

题目要求

外汇交易可以通过兑换不同国家的货币以赚取汇率差。比如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;
}

 

posted @ 2020-01-16 22:03  你的代码没bug  阅读(95)  评论(0编辑  收藏  举报