高级人员问卷 求解答

1,32位WIN平台,JDK1.6,在上述环境下一个JVM实际最多可利多少内存
2,15选5是一种数字彩票游戏,即从15个数字中随便选择不重复的5个数字组成一注彩票号码进行投注。一共3003注号码,从最小的一注号码到最大的一注号码依次是:
序号  彩票号码
1          01 02 03 04 05
2          01 02 03 04 06
           ······
10        01 02 03 04 14
11        01 02 03 04 15
12        01 02 03 05 06
           ······
3003    11 12 13 14 15
求算法:给出任意一注号码,求出序号.例输入"01 02 03 05 06"号码,输出数字12


问题补充
高手      求解答!!!!!!!!!!!

1、2G
2、一种最土的办法
[code="java"]
int index = 0;
Map map = new HashMap();
for (int i = 1; i <= 11; i++)
{
for (int j = i + 1; j <= 12; j++)
{
for (int k = j + 1; k <= 13; k++)
{
for (int l = k + 1; l <= 14; l++)
{
for (int m = l + 1; m <= 15; m++)
{
map.put("" + i + j + k + l + m, ++index);
}
}
}
}
}
[/code]

放到map<组合,序号>里

这是个排列组合的问题,用数学的方法就能搞定,可能有更简便的解决方法

[code="java"] public static final int MAX = 15;

public static void main(String[] args) {

    //a[0]为填充
    int[] a = { 0, 1, 2, 3, 5, 6 }; 

    System.out.println(index(a));

}

public static long index(int[] a) {

    long index = 1;
    for (int i = 0, len = a.length - 1; i < len; i++) {

        int front = a[i + 1] - a[i] - 1;
        int n = len - i - 1;
        for (int k = 1; k <= front; k++) {
            int m = MAX - a[i] - k;
            index += c(n, m);
        }
    }
    return index;
}

//求c(n,m)
public static long c(int n, int m) {

    if (m <= 0) {
        return 0;
    }

    long temp1 = 1;
    for (int i = m, j = 0; j < n; j++, i--) {
        temp1 *= i;
    }

    long temp2 = 1;
    for (int i = n; i > 0; i--) {
        temp2 *= i;
    }
    return temp1 / temp2;
}[/code]