Advertisement
fensa08

[APS] Trik So Karti

Sep 17th, 2019
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.32 KB | None | 0 0
  1. Трик со карти Problem 9 (3 / 4)
  2.  
  3. Перо прави трик со карти. Тој има шпил од 51-на карта (некој некогаш не му вратил една) од којшто ви дозволува да влечете карта. Тој, за трикот да биде веродостоен, не ја знае картата, но знае на која позиција се наоѓа. Мааната на Перо е тоа што тој не знае регуларно да измеша карти, туку ги зема првите седум карти, им им го превртува редоследот (пр. од 1 2 3 4 5 6 7 ги реди во 7 6 5 4 3 2 1), потоа зема една карта од превртените и една од врвот од шпилот и го става на крајот од шпилот, така се додека не ги потроши сите седум карти. Со тоа остварува едно мешање на шпил. Ваша задача е, да изработите симулцаија на ваквото мешање, такашто за дадена N-та карта т.ш. 1<=N<=51, вие ќе му изброите колку вакви мешања треба тој да направи за на врв на шпилот да дојде извлечената карта.
  4.  
  5. Име на класата: card_trick
  6.  
  7. ========================================================================================================================================
  8.  
  9. #APS-EXCERCISES made by Fensa08
  10.  
  11. import java.io.BufferedReader;
  12. import java.io.IOException;
  13. import java.io.InputStreamReader;
  14. import java.util.NoSuchElementException;
  15.  
  16.  
  17.  
  18. public class card_trick {
  19.  
  20.  
  21.     public static class LinkedQueue<E> implements Queue<E> {
  22.  
  23.         // Redicata e pretstavena na sledniot nacin:
  24.         // length go sodrzi brojot na elementi.
  25.         // Elementite se zachuvuvaat vo jazli dod SLL
  26.         // front i rear se linkovi do prviot i posledniot jazel soodvetno.
  27.         SLLNode<E> front, rear;
  28.         int length;
  29.  
  30.  
  31.  
  32.         // Konstruktor ...
  33.  
  34.         public LinkedQueue () {
  35.             clear();
  36.         }
  37.  
  38.         public boolean isEmpty () {
  39.             // Vrakja true ako i samo ako redicata e prazena.
  40.             return (length == 0);
  41.         }
  42.  
  43.         public int size () {
  44.             // Ja vrakja dolzinata na redicata.
  45.             return length;
  46.         }
  47.  
  48.         public E peek () {
  49.             // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  50.             if (front == null)
  51.                 throw new NoSuchElementException();
  52.             return front.element;
  53.         }
  54.  
  55.         public void clear () {
  56.             // Ja prazni redicata.
  57.             front = rear = null;
  58.             length = 0;
  59.         }
  60.  
  61.         public void enqueue (E x) {
  62.             // Go dodava x na kraj od redicata.
  63.             SLLNode<E> latest = new SLLNode<E>(x, null);
  64.             if (rear != null) {
  65.                 rear.succ = latest;
  66.                 rear = latest;
  67.             } else
  68.                 front = rear = latest;
  69.             length++;
  70.         }
  71.  
  72.         public E dequeue () {
  73.             // Go otstranuva i vrakja pochetniot element na redicata.
  74.             if (front != null) {
  75.                 E frontmost = front.element;
  76.                 front = front.succ;
  77.                 if (front == null)  rear = null;
  78.                 length--;
  79.                 return frontmost;
  80.             } else
  81.                 throw new NoSuchElementException();
  82.         }
  83.  
  84.     }
  85.  
  86.     public static class SLLNode<E> {
  87.         protected E element;
  88.         protected SLLNode<E> succ;
  89.  
  90.         public SLLNode(E elem, SLLNode<E> succ) {
  91.             this.element = elem;
  92.             this.succ = succ;
  93.         }
  94.  
  95.         @Override
  96.         public String toString() {
  97.             return element.toString();
  98.         }
  99.     }
  100.  
  101.     public static interface Queue<E> {
  102.  
  103.         // Elementi na redicata se objekti od proizvolen tip.
  104.  
  105.         // Metodi za pristap:
  106.  
  107.         public boolean isEmpty ();
  108.         // Vrakja true ako i samo ako redicata e prazena.
  109.  
  110.         public int size ();
  111.         // Ja vrakja dolzinata na redicata.
  112.  
  113.         public E peek ();
  114.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  115.  
  116.         // Metodi za transformacija:
  117.  
  118.         public void clear ();
  119.         // Ja prazni redicata.
  120.  
  121.         public void enqueue (E x);
  122.         // Go dodava x na kraj od redicata.
  123.  
  124.         public E dequeue ();
  125.         // Go otstranuva i vrakja pochetniot element na redicata.
  126.  
  127.     }
  128.  
  129.     static interface Stack<E> {
  130.  
  131.         // Elementi na stekot se objekti od proizvolen tip.
  132.  
  133.         // Metodi za pristap:
  134.  
  135.         public boolean isEmpty();
  136.         // Vrakja true ako i samo ako stekot e prazen.
  137.  
  138.         public E peek();
  139.         // Go vrakja elementot na vrvot od stekot.
  140.  
  141.         // Metodi za transformacija:
  142.  
  143.         public void clear();
  144.         // Go prazni stekot.
  145.  
  146.         public void push(E x);
  147.         // Go dodava x na vrvot na stekot.
  148.  
  149.         public E pop();
  150.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  151.     }
  152.  
  153.     static class ArrayStack<E> implements Stack<E> {
  154.         private E[] elems;
  155.         private int depth;
  156.  
  157.         @SuppressWarnings("unchecked")
  158.         public ArrayStack(int maxDepth) {
  159.             // Konstrukcija na nov, prazen stek.
  160.             elems = (E[]) new Object[maxDepth];
  161.             depth = 0;
  162.         }
  163.  
  164.  
  165.         public boolean isEmpty() {
  166.             // Vrakja true ako i samo ako stekot e prazen.
  167.             return (depth == 0);
  168.         }
  169.  
  170.  
  171.         public E peek() {
  172.             // Go vrakja elementot na vrvot od stekot.
  173.             if (depth == 0)
  174.                 throw new NoSuchElementException();
  175.             return elems[depth - 1];
  176.         }
  177.  
  178.  
  179.         public void clear() {
  180.             // Go prazni stekot.
  181.             for (int i = 0; i < depth; i++) elems[i] = null;
  182.             depth = 0;
  183.         }
  184.  
  185.  
  186.         public void push(E x) {
  187.             // Go dodava x na vrvot na stekot.
  188.             elems[depth++] = x;
  189.         }
  190.  
  191.  
  192.         public E pop() {
  193.             // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  194.             if (depth == 0)
  195.                 throw new NoSuchElementException();
  196.             E topmost = elems[--depth];
  197.             elems[depth] = null;
  198.             return topmost;
  199.         }
  200.     }
  201.  
  202. /*
  203.     public static void shuffle(LinkedQueue<Integer> q){
  204.         Stack<Integer> stek = new Stack<>();
  205.         int i = 0;
  206.         while(i < 7){
  207.             stek.push(q.dequeue());
  208.             i++;
  209.         }
  210.  
  211.         while(!stek.isEmpty()){
  212.             int x = stek.pop();
  213.             q.enqueue(x);
  214.             q.enqueue(q.dequeue());
  215.         }
  216.     }*/
  217.  
  218.     public static int count(int N){
  219.         // Vasiot kod tuka
  220.  
  221.         ArrayStack<Integer> s = new ArrayStack<>(10);
  222.         LinkedQueue<Integer> q = new LinkedQueue<>();
  223.  
  224.         // incijalizacija na spil
  225.         for(int i = 1; i <= 51; i++){
  226.             q.enqueue(i);
  227.         }
  228.  
  229.         int counter = 0;
  230.         while(true){
  231.  
  232.             // polnenje stek
  233.             for(int i = 0; i < 7;i++){
  234.                 s.push(q.dequeue());
  235.             }
  236.  
  237.             // meshanje
  238.             for(int i = 0; i < 7;i++){
  239.                 q.enqueue(s.pop());
  240.                 q.enqueue(q.dequeue());
  241.             }
  242.  
  243.             counter++;
  244.             if(q.peek() == N)
  245.                 return counter;
  246.  
  247.         }
  248.  
  249.        /* LinkedQueue<Integer> queue = new LinkedQueue<Integer>();
  250.  
  251.         for(int i = 1; i <= 51;i++){
  252.             queue.enqueue(i);
  253.         }
  254.  
  255.         int counter = 1;
  256.         shuffle(queue);
  257.         while(queue.peek() != N){
  258.             if(queue.peek() != N){
  259.                 shuffle(queue);
  260.                 counter++;
  261.             }
  262.             else{
  263.                 return counter;
  264.             }
  265.  
  266.         }
  267.  
  268.  
  269.         return counter;*/
  270.  
  271.  
  272.  
  273.  
  274.  
  275.     }
  276.  
  277.     public static void main(String[] args) throws NumberFormatException, IOException {
  278.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in) );
  279.         System.out.println(count(Integer.parseInt(br.readLine())));
  280.  
  281.         //  iskomentiranoto e uste eden nacin za resavanje
  282.     }
  283.  
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement