小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

题目

一天之内股票价格变动n次,只能进行最多两次股票买卖,而且必须完成一次才能进行下一次买卖,也就是说只能 买—>卖 —>买—>卖 ;

给出一天内 股票的售价,设计如何买卖能够获得最大收益,给出最大收益;

输入:

//第一行,一天能股票的价格种类
6
//第二行,给出价格数
10 22 5 75 65 80

输出:
//一行 , 最大收益
87

分析

题目要求,尽可能高效实现;

想了许久,没有得出高效算法;

一种实现

#include <stdio.h>
#include <stdlib.h>

//获取单次购买股票的最大收益
int fun(int *prices, int n)
{
    int max, temp,i,j;
    temp = 0;
    max = 0;

    for (i = 0; i < n; i++)
    {
        temp = 0;
        for (j = i + 1; j < n; j++)
        {
            if (prices[j] > prices[i])
            {
                temp = (prices[j] - prices[i]);
                if (temp > max)
                    max = temp;
            }//if
        }//for
    }//for
    return max;
}

//获得两次购买股票的最大收益
int maxIncome(int *prices, int n)
{
    int max, temp , i , j;
    int *p;
    max = 0;
    temp = 0;

    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (prices[j] > prices[i])
            {
                temp = 0;
                temp += (prices[j] - prices[i]);
                p = prices + j + 1;
                temp = temp + fun(p, n - j-1);
            }
            if (temp > max)
            {
                max = temp;
            }
        }//for
    }//for
    return max;
}

int main()
{
    int n , tmp , *prices , ret , i;

    scanf_s("%d", &n);
    prices = (int *)malloc(n*sizeof(int));

    for (i = 0; i < n; i++)
    {
        scanf_s("%d", &tmp);
        prices[i] = tmp;
    }

    ret = maxIncome(prices, n);

    printf("%d\n", ret);

    free(prices);
    system("pause");
    return 0;
}
posted on 2015-09-19 15:27  Coding菌  阅读(157)  评论(0编辑  收藏  举报