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;
      }
}

posted on 2013-06-04 11:13  Ja °  阅读(270)  评论(0编辑  收藏  举报

导航