Через считалку в строке выбираются люди в одномерном массиве и заносятся в очередь. До этого всё работало через остаток от целочисленного деления,но для вариативности считалки нужно заменить на if. Но оно, естественно,не работает,т.к. по условию переменная определяется как 0 и оно 5 раз выводит 0 позицию одномерного массива,т.е. 1.
Подскажите,как можно адекватно втулить во внутренний цикл if,чтобы оно работало?
#include <iostream>
#include <sstream>
#include <string>
#include <Windows.h>
#include <queue>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
std::string sch("Эни, бени, рики, таки, Турба, урба, синтибряки, Эус, бэус, краснобэус, Бац!");
std::cout << "Считалочка: " << sch << endl;
queue <int> q;
int n, j, i;
int people[5];
people[0] = 1;
people[1] = 2;
people[2] = 3;
people[3] = 4;
people[4] = 5;
cout << "Нумерация людей: ";
for (i = 0; i < 5; i++)
{
printf("%2d", people[i]);
}
cout << endl;
std::istringstream ss(sch);
std::string s;
n = 0, i = -1;
while (ss >> s) ++n;
for (j = 0; j < 5; ++j)
{
i += n;
if (i > 4)
i = 0;
cout << "Выбывший №:" << people[i] << endl;
cout << people[i] << endl;
q.push(people[i]);
}
cout << endl;
cout << "Очередь: ";
while (!q.empty())
{
people[i] = q.front();
q.pop();
cout << people[i] << " ";
}
cout << endl;
return 0;
}
Чтобы посмотреть какой должен быть результат: Просто заменить весь if на i %= 5;
У вас вообще ерунда - смотрите: номер i
у вас может выбыть, но он при этом у вас не выбывает из списка. Получается ерунда.
Вот, на коленке набросанный вариант (хотя у меня ощущение, что можно и без дека, что есть какая-то формула для вычисления очередного числа... Но времени думать много нет).
queue<int> make_queue(unsigned int count, unsigned int n)
{
queue<int> q;
deque<int> d(count);
generate(d.begin(),d.end(),[m = 0] () mutable { return m++; });
int j = 0;
while(!d.empty())
{
j = (j - 1 + n)%d.size();
q.push(d[j]);
d.erase(d.begin()+j);
}
return q;
}
В очереди - выбранные индексы (как принято в C++, отсчет индексов начинается с 0 :)).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Условие : Дано массив чиселЗа один ход разрешается вычеркнуть любую последовательность одинаковых цифр, идущих подряд