iOS 借助排列组合求赛事投注的注数问题。

本文探讨了一个iOS应用中的问题,如何根据用户选择的赛事结果计算不同过关方式的投注注数。这是一个典型的排列组合问题,通过初始化数组并遍历“10”组合来找到所有可能的组合。文章提供了OC语言的算法实现,以解决从多个选项中选取一定数量的组合问题。
摘要由CSDN通过智能技术生成

问题:用户选择了5场赛事,每场比赛的赛果有多个(主胜、平、主负等等),若该用户5场比赛的投注结果为[2、1、3、4、2个赛果],过关方式有2串1、3串1、4串1和5串1。那么投注的注数是都少类?

对于2串1:可选的组合 2-1=>2注

                                     2-3=>3注

                                     2-4=>8注

                                     2-2=>4注

                                     1-3=>3注

                                     1-4=>4注

                                     1-2=>2注

                                     3-4=>12注

                                     3-2=>6注

                                     4-2=>8注,总共2+3+8+4+3+4+2+12+6+8=52注。

其他的过关方式用同样的方法可以求得。这是应该是典型的排列组合问题?如果用编程来实现关键在于找到每种过关方式的所有组合。

为题本质:求(1...m)中,n个数的组合

 

解决思路(借鉴出处http://bbs.csdn.net/topics/380048966):是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。

 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。

 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,

 同时将其左边的所有“1”全部移动到数组的最左端。

 当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。

 

 例如求5中选3的组合:

 1    1    1    0    0    //1,2,3

 1    1    0    1    0    //1,2,4

 1    0    1    1    0    //1,3,4

 0    1    1    1    0    //2,3,4

 1    1    0    0    1    //1,2,5

 1    0    1    0    1    //1,3,5

 0    1    1    0    1    //2,3,5

 1    0    0    1    1    //1,4,5

 0    1    0    1    1    //2,4,5

 0    0    1    1    1    //3,4,5

鉴于网上已经有很多其他语言的算法实现,这里仅给出OC的实现

// count   : 选了多少场比赛
// passway : 某一过关方式
// array   : 每场选的赛果的数目
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值