SlavkovB

[АПС] Трик со карти

Sep 13th, 2019
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.34 KB | None | 0 0
  1. /**Трик со карти
  2. Перо прави трик со карти. Тој има шпил од 51-на карта (некој некогаш не му вратил една) од којшто ви дозволува да влечете карта. Тој, за трикот да биде веродостоен, не ја знае картата, но знае на која позиција се наоѓа. Мааната на Перо е тоа што тој не знае регуларно да измеша карти, туку ги зема првите седум карти, им им го превртува редоследот (пр. од 1 2 3 4 5 6 7 ги реди во 7 6 5 4 3 2 1), потоа зема една карта од превртените и една од врвот од шпилот и го става на крајот од шпилот, така се додека не ги потроши сите седум карти. Со тоа остварува едно мешање на шпил. Ваша задача е, да изработите симулцаија на ваквото мешање, такашто за дадена N-та карта т.ш. 1<=N<=51, вие ќе му изброите колку вакви мешања треба тој да направи за на врв на шпилот да дојде извлечената карта.
  3.  
  4. Име на класата: card_trick
  5.  
  6. Input:              Output:
  7.  15                    1
  8.  
  9. **/
  10.  
  11. //CODE
  12.  
  13.  
  14. import java.io.BufferedReader;
  15. import java.io.IOException;
  16. import java.io.InputStreamReader;
  17. import java.util.NoSuchElementException;
  18.  
  19. interface Stack<E> {
  20.     public boolean isEmpty();
  21.  
  22.     public E peek();
  23.  
  24.     public void clear();
  25.  
  26.     public void push(E x);
  27.  
  28.     public E pop();
  29.  
  30.     public int len();
  31. }
  32.  
  33. interface Queue<E> {
  34.     public boolean isEmpty();
  35.  
  36.     public int size();
  37.  
  38.     public E peek();
  39.  
  40.     public void clear();
  41.  
  42.     public void enqueue(E x);
  43.  
  44.     public E dequeue();
  45.  
  46.     public int len();
  47. }
  48.  
  49. class ArrayQueue<E> implements Queue<E> {
  50.     E[] elems;
  51.     int length, front, rear;
  52.  
  53.     @SuppressWarnings("unchecked")
  54.     public ArrayQueue(int maxlength) {
  55.         elems = (E[]) new Object[maxlength];
  56.         clear();
  57.     }
  58.  
  59.     public boolean isEmpty() {
  60.         return (length == 0);
  61.     }
  62.  
  63.     public int size() {
  64.         return length;
  65.     }
  66.  
  67.     public int len() {
  68.         return elems.length;
  69.     }
  70.  
  71.     public E peek() {
  72.         if (length > 0)
  73.             return elems[front];
  74.         else
  75.             throw new NoSuchElementException();
  76.     }
  77.  
  78.     public void clear() {
  79.         length = 0;
  80.         front = rear = 0;
  81.     }
  82.  
  83.     public void enqueue(E x) {
  84.         elems[rear++] = x;
  85.         if (rear == elems.length)
  86.             rear = 0;
  87.         length++;
  88.     }
  89.  
  90.     public E dequeue() {
  91.         if (length > 0) {
  92.             E frontmost = elems[front];
  93.             elems[front++] = null;
  94.             if (front == elems.length)
  95.                 front = 0;
  96.             length--;
  97.             return frontmost;
  98.         } else
  99.             throw new NoSuchElementException();
  100.     }
  101. }
  102.  
  103. class ArrayStack<E> implements Stack<E> {
  104.  
  105.     private E[] elems;
  106.     private int depth;
  107.  
  108.     @SuppressWarnings("unchecked")
  109.     public ArrayStack(int maxDepth) {
  110.         elems = (E[]) new Object[maxDepth];
  111.         depth = 0;
  112.     }
  113.  
  114.     public boolean isEmpty() {
  115.         return (depth == 0);
  116.     }
  117.  
  118.     public E peek() {
  119.         if (depth == 0)
  120.             throw new NoSuchElementException();
  121.         return elems[depth - 1];
  122.     }
  123.  
  124.     public void clear() {
  125.         for (int i = 0; i < depth; i++)
  126.             elems[i] = null;
  127.         depth = 0;
  128.     }
  129.  
  130.     public void push(E x) {
  131.         elems[depth++] = x;
  132.     }
  133.  
  134.     public E pop() {
  135.         if (depth == 0)
  136.             throw new NoSuchElementException();
  137.         E topmost = elems[--depth];
  138.         elems[depth] = null;
  139.         return topmost;
  140.     }
  141.  
  142.     public int len() {
  143.         return elems.length;
  144.     }
  145. }
  146.  
  147.  
  148. public class card_trick {
  149.     public static int count(int N) {
  150.         Queue<Integer> deck = new ArrayQueue<Integer>(51);
  151.         Stack<Integer> rotate = new ArrayStack<Integer>(7);
  152.  
  153.         int count = 0;
  154.  
  155.         for (int i = 0; i < deck.len(); i++) {
  156.             deck.enqueue(i + 1);
  157.         }
  158.  
  159.         while (N != deck.peek()) {
  160.             for (int i = 0; i < rotate.len(); i++) {
  161.                 rotate.push(deck.dequeue());
  162.             }
  163.  
  164.             while (!rotate.isEmpty()) {
  165.                 deck.enqueue(rotate.pop());
  166.                 deck.enqueue(deck.dequeue());
  167.             }
  168.             ++count;
  169.         }
  170.         return count;
  171.     }
  172.  
  173.     public static void main(String[] args) throws NumberFormatException, IOException {
  174.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in) );
  175.         System.out.println(count(Integer.parseInt(br.readLine())));
  176.     }
  177.  
  178. }
Add Comment
Please, Sign In to add comment