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]