Java - 魔术师发牌

import   java.util.LinkedList;
 
public   class   Magician {
         public   static   void   main(String[] args){
            LinkedList<Integer> ll =   new   LinkedList<Integer>();
               int   k = 0;
               for ( int   i=0;i<13;i++){
                  ll.add(0);
            }
             magician(ll,k);
            
               for   (Integer l : ll) {
                  System.   out .print(l +   " "   );
            }
      }
 
         private   static   void   magician(LinkedList<Integer> ll,   int   k) {
               int   j = 1;
               int   m=0;
               boolean   b =   true ;
               for ( int   i=0;i<ll.size();i++ ){
                  k += i;
                  
                     if (k<ll.size()){
                        k = small(ll,k,m);
                  }
                     else {
                        k = big(ll,k,m);
                  }
                  ll.set(k, j++);
                  m = k;
            }
      }
 
         private   static   int   big(LinkedList<Integer> ll,   int   k,   int   m) {
            k -= ll.size();
               int   l = k;
               for ( int   n=0;n<l;n++){
                     if (ll.get(n) != 0){
                        k += 1;
                  }
                  
                     if (k > ll.size()){
                        k -= ll.size();
                  }
            }
               for ( int   n=m;n<ll.size();n++){
                     if (ll.get(n) != 0){
                        k += 1;
                  }
                  
                     if (k > ll.size()){
                        k = big(ll, k, m);
                  }
            }
               for ( int   n=l;n<=k;n++){
                     if (n>=ll.size()){
                        k -= ll.size();
                        n -= ll.size();
                  }
                     if (ll.get(n) != 0){
                        k += 1;
                  }
            }
               return   k;
      }
 
         private   static   int   small(LinkedList<Integer> ll,   int   k,   int   m) {
               int   l = k;
               for ( int   num=m;num<=k;num++){
                     if (ll.get(num) != 0){
                        k += 1;
                  }
                     if (k>ll.size()){
                        k = big(ll, k, m);
                  }
                     if (num>=ll.size()){
                        k -= ll.size();
                        num -= ll.size();
                  }
            }
               return   k;
      }
}

转载于:https://www.cnblogs.com/wn19910213/archive/2013/06/04/3116740.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值