#include #include using namespace std; #include "Circle.h" Circle::Circle(){} vector Circle::getNames() { //used to populate a vector with names string special = "Josephus"; vector names = {{ "Jacob", "Isabella", "Ethan", "Sophia", "Michael", "Emma", "Jayden", "Olivia", "William", "Ava", "Alexander", "Emily", "Noah", "Abigail", "Daniel", "Madison", "Aiden" , "Chloe", "Anthony", }}; return names; } vector Circle::playGame(int n, int m) { vector names = getNames(); vector temp; if(n < 10 or n > 20){ names = {}; return names; } if(m < 0){ names = {}; return names; } for(int i = 0; i < 20 - n; i++) { names.pop_back(); } names.push_back("Josephus"); //insures that Josephus will be in the game int count = 0; int threshold = 0; for(int i = 0; i < n; i++) { int hits = 0; while(hits < m) { if(names[count] == ""){ } else { hits++; } if(hits == m) { temp.push_back(names[count]); names[count] = ""; hits = 100; } count++; if(count+1 > names.size()) { count = 0; threshold++; } if(threshold > 100) { //threshold against infinite loop hits = 100; } } } return temp; } int Circle::reportSafeIndex(int n, int m) { //uses similar function as playGame() to determine index vector names = getNames(); vector temp; int count = 0; int threshold = 0; if(n < 10 or n > 20){ return -1; } if(m < 0){ return -1; } for(int i = 0; i < 20 - n; i++) { names.pop_back(); } names.push_back("Josephus"); for(int i = 0; i < n; i++) { int hits = 0; while(hits < m) { if(names[count] == ""){ } else { hits++; } if(hits == m) { temp.push_back(names[count]); names[count] = ""; hits = 100; } count++; if(count+1 > names.size()) { count = 0; threshold++; } if(threshold > 100) { //incase of infinite loop due to improper input hits = 100; } } } string index_holder = temp[n-1]; int index = 0; names = getNames(); for(unsigned int i = 0; i < names.size(); i++){ if(names[i] == index_holder) { index = i+1; } } return index; }