两道大二的算法题,求思路。

刚开的算法课,老师还没讲到具体算法。
但是每周要做两道题,实在不太会,求解,C语言编写。

![图片说明
图片说明

参考:
http://blog.csdn.net/gubojun123/article/details/8036482

第一个就是使用栈,先进后出,按顺序压栈,出栈就得
第二个就是一个函数 这里计算最大值 ,取得是 6 4 5 三天 刷题15 ,最小题数 4 60
解决方法,由于取得必须是一段连续的时间 ,最简单的方式是求出所有情况 ,这里是 15种 然后求最小值,
好一点的方法是

(n1+n2+n3++...N)*n 这是题中给出的计算公式 , n 表示最小值, 往后读取数据 ,如果 新加入的N的值 大于 n 那么就直接读入 ,否则计算值判断 大小

问题2:参考:http://www.cnblogs.com/CCBB/archive/2009/04/25/1443455.html

package com.answer.cal;

public class PersonValue {

/**
 * @param args
 */
public static void main(String[] args) {
    int[] practises = { 3, 1, 6, 4, 5, 2 };
    int value = CalMyValue(practises);
    System.out.println("人生价值为:"+value);
}
//计算人生价值
public static int CalMyValue(int[] practises) {
    int value = 0;
    for (int i = 0; i < practises.length; i++) {
        for (int j = i; j < practises.length; j++) {
            int[] tem = getTem(practises, i, j);
            int temValue = getSum(tem) * getMin(tem);
            value = value >= temValue ? value : temValue;
        }
    }
    return value;
}
//计算数组之和
private static int getSum(int[] tem) {
    int sum = 0;
    for(int i = 0; i < tem.length ; i++){
        sum += tem[i];
    }
    return sum;
}

//截取数组
private static int[] getTem(int[] practises, int i, int j) {
    // TODO Auto-generated method stub
    int[] tem = new int[j - i + 1];
    if (j == i) {
        tem[0] = practises[i];
    } else {
        for (int k = i; k <= j; k++) {
            tem[k - i] = practises[k];
        }
    }
    return tem;
}
//获取最小值
public static int getMin(int[] num) {
    int min = num[0];
    for (int i = 1; i < num.length; i++) {
        min = min <= num[i] ? min : num[i];
    }
    return min;
}

}

第二题做了一下,你也试试吧,思路在代码中比较清晰,不做过多的注释