Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "queue.h"
- // Josephus problem
- // Needs to include queue.h and queue.c
- int main()
- {
- // yusfus
- // example:
- // n = 9, m = 2
- // input: [1,2,3,4,5,6,7,8,9]
- // output: [2,4,6,8,1,5,9,7,3]
- int n = 9;
- int m = 2;
- int counter = 1;
- int value;
- queue q1;
- create_queue(&q1);
- enqueue(1, &q1);
- enqueue(2, &q1);
- enqueue(3, &q1);
- enqueue(4, &q1);
- enqueue(5, &q1);
- enqueue(6, &q1);
- enqueue(7, &q1);
- enqueue(8, &q1);
- enqueue(9, &q1);
- //print_queue(&q1);
- while (n / m > 0) // 9/2=4>0
- {
- if (counter < m)
- {
- dequeue(&q1, &value);
- enqueue(value, &q1);
- counter++;
- }
- else
- {
- dequeue(&q1, &value);
- printf("%d\t", value);
- counter = 1;
- n--;
- }
- }
- while (n / m == 0 && n > 0)
- {
- dequeue(&q1, &value);
- printf("%d\t", value);
- n--;
- }
- return 0;
- }
- /* Pseudo-Code
- Alg-Josephus:
- Q = create_queue
- N = num of people
- M = every m person exists the circle
- Counter = 1 //counter that resets after every success
- While n / m > 0: // there is no remainder
- if counter < m:
- x < dequeue(q)
- enqueue(x,q)
- counter++
- else: // counter = m
- x < dequeue(q)
- print(x)
- n = n-1 // num of people decreases
- counter = 1 // counter resets
- While(n > 0 and n / m == 0): // There is remainder
- x < dequeue(q)
- print(x)
- n = n-1
- // end
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement