scala akka 修炼之路4(打印彩票N选M的穷举算法)

package cn.yangg.scala.base.init


class LotteryChoiceAlgor(list:List[Int],selectCount:Int) {

  val totalLayer=selectCount

  val length=list.length

  vartotalChoice=0

  def mainAlgor():Unit={

    valstartIndex=(-1)

    valcurrentLayer=1

    val item=""

    this.excute(startIndex,currentLayer,item)

  }

  /**

   * 1层:startIndex=0,endIndex=length-(totalLayer-1)-1

   * 2层:startIndex=itemIndex+1,endIndex=length-(totalLayer-2)-1

   * n层:startIndex=itemIndex+1,endIndex=length-(totalLayer-n)-1

   */

  private def excute(itemIndex:Int,currentLayer:Int,str:String):Unit={  

   valstartIndex=itemIndex+1//第N层计算可选排列元素的开始索引

   val endIndex=length-(totalLayer-currentLayer)-1//第N层计算可选排列元素的结束索引

   if(currentLayer<totalLayer){

    for(index <-startIndex toendIndex){

      excute(index,currentLayer+1,str+list(index)+"->")

    }

   }else if(currentLayer==totalLayer){

     for(index <-startIndex toendIndex){

      println(str+list(index))

      this.totalChoice+=1

     }

   }

  }

  def printTotalChoice={

    println("total choice Count:"+this.totalChoice)

  }

}

object LotteryStart{

  def main(args:Array[String]){

    val choiceAlgor=new LotteryChoiceAlgor((1 to 34).toList,6)

    choiceAlgor.mainAlgor

    choiceAlgor.printTotalChoice

  }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值