日期:2014-05-18  浏览次数:20586 次

一个比较有意思的彩票算法
打算写一个双色球统计的程序,其中有一个功能打算优化一下,但是遇到麻烦了。来请教下大家的看法:

假设我买了一个双色球号:01 02 03 04 05 06 07 七个数字,假设不要篮球,七个全部是红球,那么意思就是说我买了七注,分

别为:01 02 03 04 05 06 | 01 02 03 04 05 07 | 01 02 03 04 06 07 | 01 02 03 05 06 07 | 01 02 04 05 06 07 

| 01 03 04 05 06 07 和 | 02 03 04 05 06 07

那么假设我是单独买的七注,而不是买的 01 02 03 04 05 06 07,怎么把那七注合并为 01 02 03 04 05 06 07呢(通过C#),

如果单独把七注不合并插入数据库太不好了。

------解决方案--------------------
hashtable

你需要全扫描一遍,如果hashtbale没有这个值压入这个值,有就跳过

最后统计一下hashtable的key是啥就成
这是对你问题的回答

但是我很纳闷啊选7位一注 和选6位7注意义完全不同啊。你场景假设就7个号无所谓来着,因为根据抽屉原则,你刚好没个的概率都一样,但是正儿八经的双色球可绝对不是7个号,那么你这个概率完全不同,意义也完全不同

要是我没记错正经红球有33个,你6*7=42个,那我绝对可以一样来一个,你这合并出来就是33个号全买,那还不要人命啊,那得把房子卖了先
------解决方案--------------------
嗯好吧,我把这个看作一个编程爱好者的编程入门上问题,不打消你的积极性、不去纠结买彩票的“专业”知识了。

假设每一次买彩票的六个红球放到一个int[]数组中,而你又多注,使用一个集合List<int[]>来保存它,例如这样的代码示意:
C# code
var a = new int[] { 1, 2, 3, 4, 5, 6 };
var b = new int[] { 1, 2, 3, 4, 5, 7 };
var c = new int[] { 1, 3, 4, 5, 16, 32 };
List<int[]> x = new List<int[]>();
x.Add(a);
x.Add(b);
x.Add(c);