好了,所以我真的很无聊,并决定做一个乐透计算器类型的事情(是的,我知道,我很伤心!)的Java,彩票calculuator
无论如何,我想知道是否有一个Java库方法/用于制定排列/组合的类。我想要生成所有可能的数字集,从1 - 49有6个数字,没有在其中重复
如果这不是作为预先写好的方法可用,什么是我最好的方法写我自己的?
谢谢
好了,所以我真的很无聊,并决定做一个乐透计算器类型的事情(是的,我知道,我很伤心!)的Java,彩票calculuator
无论如何,我想知道是否有一个Java库方法/用于制定排列/组合的类。我想要生成所有可能的数字集,从1 - 49有6个数字,没有在其中重复
如果这不是作为预先写好的方法可用,什么是我最好的方法写我自己的?
谢谢
这是我的第二个答案。这是一个愚蠢的,但简单的方法来编码这个问题(在Java中):
for (int i1=1; i1<45; i1++) {
for (int i2=i1+1; i2<46; i2++) {
for (int i3=i2+1; i3<47; i3++) {
for (int i4=i3+1; i4<48; i4++) {
for (int i5=i4+1; i5<49; i5++) {
for (int i6=i5+1; i6<50; i6++) {
System.out.format("%d %d %d %d %d %d\n", i1, i2, i3, i4, i5, i6);
}}}}}}
如果你是为了好玩这样做,你应该不是从头开始做呢?
富有想象力的代码加分?看起来是尝试递归的理想机会。
想到
getPermitations(长度) { 结果=新向量 TMP = getPermitations(lenght-1)
为(I = 0 => 9) { 为(字符串S: tmp) { result.add(i + tmp); }}
}
是的,我知道这是不工作的代码,其中在复制别人的乐趣其他工作代码?
然后发挥优化它的额外点。
或者你可以写一些东西来实际构建完整的概率树,为每一种可能性创建一个新的对象。我想知道你是否先用尽了记忆! – Jon 2010-07-13 11:14:27
粗略估计:
49 * 48 * 47 * 46 * 45 * 44 = 10.068.347.520
这是一个列表的包含所有可能的组合长度。请注意,您不能使用ArrayList
,因为这由阵列支持,并且阵列的最大大小限制为Integer.MAX_VALUE
。即使您使用byte
阵列来存储十个十亿组合,你应该像这样开头的JVM:
java -Xmx250G my.little.LotteryGenerator
(假设你在船上足够的内存)
很抱歉的意大利面条代码和可怕的命名变量(我住了,直到凌晨3点一晚)用Java编写自己的抽奖程序,但在这里,雅去
public static void LottoNumbers()
{
int zero=0;
int one=0;
int two=0;
int three=0;
int four=0;
int five=0;
int six=0;
int bonus = 0;
int bonusball=0;
ArrayList myNumbers = new ArrayList();
Random random2 = new Random();
ArrayList ResultsList = new ArrayList<results>();
ArrayList numberList = new ArrayList();
for (int outer = 0; outer < 140000001; outer++)
{
myNumbers.clear();
for (int i = 1; i < 7; i++)
{
boolean a = true;
while(a)
{
int r = random2.nextInt();
if (!myNumbers.contains(r)) {
myNumbers.add(random2.nextInt(49) +1);
a = false;
}
}
}
numberList.clear();
for (int i = 1; i < 7; i++)
{
boolean a = true;
while (a)
{
Random random = new Random();
int r = random.nextInt(49) +1;
if (!numberList.contains(r))
{
numberList.add(r);
a = false;
}
}
}
Random random = new Random();
boolean b = true;
while(b)
{
int bb = random.nextInt(49) +1;
if (!numberList.contains(bb))
{
bonusball = bb;
b = false;
}
}
int matches = 0;
for (int u =0; u<numberList.size(); u++)
{
if (myNumbers.contains(numberList.get(u)))
{
matches++;
}
}
if (matches == 0)
zero++;
if (matches == 1)
one++;
if (matches == 2)
two++;
if (matches == 3)
three++;
if (matches == 4)
four++;
if (matches == 5)
five++;
if (matches== 5 && myNumbers.contains(bonusball))
bonus++;
if (matches == 6) {
six++;
System.out.println("Jackpot! " + numberList.get(0)
+"," + numberList.get(1)
+"," + numberList.get(2)
+"," + numberList.get(3)
+"," + numberList.get(4)
+"," + numberList.get(5));
}
if (outer%500000==0) {
System.out.println("none: " + zero + " one: " + one + " two: " + two + " three: " + three + " four: " + four +
" five: " + five + " 5+bonus: " + bonus + " six: " + six + " total: " + outer);
}
我最初的理论是反对一组由我自己选择6个号码的运行6个随机数。但我发现随机数发生器有点不可靠,1,2,3,4,5,6会赢得一百万,有时甚至更多!但是我随后决定随机生成我的数字,我发现的结果非常准确,至少在每14,000,000次迭代大概出现一次获胜(基于英国)的6组匹配数字。
我对每个组合都应该出现在1400万美元中的想法很感兴趣,并且想要做1.4亿的抽奖,并且看看哪些数字最多。当我意识到将要存储所有这些数据的头痛时,我放弃了。所以我只是卡在一些打印行中输出总计(即5个匹配)和任何发生的困境。可能帮我在这个周末挑几个数字!
在任何人火灾的任何镜头,我是一个新的和热情的程序员,知道这是一个有点乱,但它只是为了好玩:)
编辑:节目刚完成其140millionth循环,并且有10个困境!
现在,如果只有你能把它绑成一个真正的彩票,你将是一个非常有钱的人;) – Leigh 2012-02-23 14:40:34
你不会住在德国,是吗? ;) – 2010-07-13 10:24:40
不,英格兰!怎么会? – Ricki 2010-07-13 10:26:27
德国彩票有1 - 49个数字,我认为..但也有其他国家... – RoflcoptrException 2010-07-13 10:28:20