Господа программисты, прошу помощи! Необходимо решить задачу Иосифа Флавия через массивы. Суть в чем: m воинов, стоящих по кругу, убивают каждого n-го. Требуется определить номер k начальной позиции воина, который останется последним. Начала делать, но ни в какую не могу реализовать кусок с самим алгоритмом. Воины - массив из булевых переменных с начальным значением true. "Убиваем" каждого третьего (в моем условии), то бишь заменяем на false. Нужно пробегаться по массиву с первого до последнего "еще живого" до тех пор, пока не останется один true, его номер надо вытянуть. Ничего дельного придумать не могу, помогите, пожалуйста! Вот что у меня есть:
| Код | static void Main(string[] args) { int m = 10, n = 3; Console.WriteLine("{0} воинов стоят по кругу, убивают каждого {1}-го; последним остается воин {2}", m, n, zad_if_mas(n, m)); }
static int zad_if_mas(int m, int n) { int k = 0;
bool[] knights = new bool[m]; for (int i = 0; i < m; i++) { knights[i] = true; }
while (m > 1) { // вот сюда нужно впихать сам алгоритм }
for (int i = 0; i < m; i++) // поиск номера последнего оставшегося { if (knights[i] == true) { k = i + 1; } } return k; }
|
|