Advertisement
ilevishinov

Трик со карти

Nov 6th, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.11 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.NoSuchElementException;
  5.  
  6. interface Stack<E> {
  7.      
  8.     // Elementi na stekot se objekti od proizvolen tip.
  9.  
  10.     // Metodi za pristap:
  11.  
  12.     public boolean isEmpty ();
  13.         // Vrakja true ako i samo ako stekot e prazen.
  14.  
  15.     public E peek ();
  16.         // Go vrakja elementot na vrvot od stekot.
  17.  
  18.     // Metodi za transformacija:
  19.  
  20.     public void clear ();
  21.         // Go prazni stekot.
  22.  
  23.     public void push (E x);
  24.         // Go dodava x na vrvot na stekot.
  25.  
  26.     public E pop ();
  27.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  28. }
  29.  
  30. interface Queue<E> {
  31.  
  32.         // Elementi na redicata se objekti od proizvolen tip.
  33.  
  34.     // Metodi za pristap:
  35.  
  36.     public boolean isEmpty ();
  37.         // Vrakja true ako i samo ako redicata e prazena.
  38.  
  39.     public int size ();
  40.         // Ja vrakja dolzinata na redicata.
  41.  
  42.     public E peek ();
  43.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  44.  
  45.     // Metodi za transformacija:
  46.  
  47.     public void clear ();
  48.         // Ja prazni redicata.
  49.  
  50.     public void enqueue (E x);
  51.         // Go dodava x na kraj od redicata.
  52.  
  53.     public E dequeue ();
  54.         // Go otstranuva i vrakja pochetniot element na redicata.
  55.  
  56. }
  57.  
  58. class LinkedStack<E> implements Stack<E> {
  59.  
  60.     //Stekot e pretstaven na sledniot nacin: top e link do prviot jazol
  61.     // na ednostrano-povrzanata lista koja sodrzi gi elementite na stekot .
  62.     private SLLNode<E> top;
  63.  
  64.     public LinkedStack () {
  65.         // Konstrukcija na nov, prazen stek.
  66.         top = null;
  67.     }
  68.  
  69.     public boolean isEmpty () {
  70.         // Vrakja true ako i samo ako stekot e prazen.
  71.         return (top == null);
  72.     }
  73.  
  74.     public E peek () {
  75.         // Go vrakja elementot na vrvot od stekot.
  76.         if (top == null)
  77.             throw new NoSuchElementException();
  78.         return top.element;
  79.     }
  80.  
  81.     public void clear () {
  82.         // Go prazni stekot.
  83.         top = null;
  84.     }
  85.  
  86.     public void push (E x) {
  87.         // Go dodava x na vrvot na stekot.
  88.         top = new SLLNode<E>(x, top);
  89.     }
  90.  
  91.     public E pop () {
  92.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  93.         if (top == null)
  94.             throw new NoSuchElementException();
  95.         E topElem = top.element;
  96.         top = top.succ;
  97.         return topElem;
  98.     }
  99.  
  100. }
  101.  
  102.  
  103. class LinkedQueue<E> implements Queue<E> {
  104.  
  105.         // Redicata e pretstavena na sledniot nacin:
  106.     // length go sodrzi brojot na elementi.
  107.     // Elementite se zachuvuvaat vo jazli dod SLL
  108.     // front i rear se linkovi do prviot i posledniot jazel soodvetno.
  109.     SLLNode<E> front, rear;
  110.     int length;
  111.  
  112.     // Konstruktor ...
  113.  
  114.     public LinkedQueue () {
  115.         clear();
  116.     }
  117.  
  118.     public boolean isEmpty () {
  119.         // Vrakja true ako i samo ako redicata e prazena.
  120.         return (length == 0);
  121.     }
  122.  
  123.     public int size () {
  124.         // Ja vrakja dolzinata na redicata.
  125.         return length;
  126.     }
  127.  
  128.     public E peek () {
  129.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  130.         if (front == null)
  131.             throw new NoSuchElementException();
  132.         return front.element;
  133.     }
  134.  
  135.     public void clear () {
  136.         // Ja prazni redicata.
  137.         front = rear = null;
  138.         length = 0;
  139.     }
  140.  
  141.     public void enqueue (E x) {
  142.         // Go dodava x na kraj od redicata.
  143.         SLLNode<E> latest = new SLLNode<E>(x, null);
  144.         if (rear != null) {
  145.             rear.succ = latest;
  146.             rear = latest;
  147.         } else
  148.             front = rear = latest;
  149.         length++;
  150.     }
  151.  
  152.     public E dequeue () {
  153.         // Go otstranuva i vrakja pochetniot element na redicata.
  154.         if (front != null) {
  155.             E frontmost = front.element;
  156.             front = front.succ;
  157.             if (front == null)  rear = null;
  158.             length--;
  159.             return frontmost;
  160.         } else
  161.             throw new NoSuchElementException();
  162.     }
  163.  
  164. }
  165.  
  166. class SLLNode<E> {
  167.         protected E element;
  168.         protected SLLNode<E> succ;
  169.  
  170.         public SLLNode(E elem, SLLNode<E> succ) {
  171.                 this.element = elem;
  172.                 this.succ = succ;
  173.         }
  174.  
  175.         @Override
  176.         public String toString() {
  177.                 return element.toString();
  178.         }
  179. }
  180.  
  181. public class card_trick {
  182.    
  183.     public static int shuffle(int n) {
  184.         if(n==1) return 0;
  185.        
  186.         LinkedStack<Integer> stack=new LinkedStack();
  187.         LinkedQueue<Integer> q=new LinkedQueue();
  188.        
  189.         for(int i=1;i<52;i++) {
  190.             q.enqueue(i);
  191.         }
  192.        
  193.         if(n==1) return 0;
  194.        
  195.         int shuffles=0;
  196.        
  197.         while(q.peek()!=n) {
  198.             for(int i=0;i<7;i++) {
  199.                 stack.push(q.dequeue());
  200.             }
  201.             for(int i=0;i<7;i++) {
  202.                 q.enqueue(stack.pop());
  203.                 q.enqueue(q.dequeue());
  204.             }
  205.             shuffles++;
  206.         }
  207.        
  208.         return shuffles;
  209.     }
  210.    
  211.     public static void main(String[] args) throws IOException{
  212.         BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
  213.         System.out.println(shuffle(Integer.parseInt(br.readLine())));
  214.     }
  215.  
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement