Есть ли способ, которым я могу пометить элемент в массиве типа включения и выключения, или назад и вперед между определенным целым числом, таким как 1 и 2 внутри вложенного цикла. Я очень застрял на домашнем задании. В основном у меня есть 150 элементов в массиве, и почтальон просматривает и открывает ящики с кратными 2, а затем кратными 3, и если он попадает в ящик, который уже был открыт с кратным 2, он закрывает его, а затем он идет через 150 почтовых ящиков с кратными 4 и так далее до 150, и он закрывает ящик, если он уже открыт, и открывает закрытые ящики, пока внешний цикл не достигнет 150, и все числа не будут использованы
Я пробовал логические операторы if и if, и просто кучу дополнительных встречных переменных, и знаю, как эффективно это сделать
Я заставил его работать один раз, но код был настолько неряшливым, что я просто поцарапал его, потому что это был, вероятно, неправильный ответ в любом случае
Конечно, я не пытаюсь обмануть в своем курсе, но я прочитал эту главу несколько раз, провел многочисленные поиски в Интернете, и я заблудился. Я не спрашиваю код, я просто хочу понять, как лучше всего пометить или пометить элементы в массиве
Используйте оператор модуля: %
проверить остаток.
Вот один пример, который делает то, что вы описываете.
Чтобы переключить логическое значение, просто используйте логический оператор «not».
#include <vector>
#include <iostream>
class boxes {
private:
std::vector<bool>open;
// visit boxes for a given step
void visit (size_t step)
{
for (size_t i = 0 ; i < open.size() ; i+= step)
{
open[i] = ! open[i]; // toggle open state
}
}
public:
// constructor
boxes (size_t size)
{
// all boxes initially closed
open.resize(size, false);
// visit boxes with all values
for (size_t i = 2 ; i != size ; i++)
{
visit (i);
}
}
// trace function
void trace (void)
{
for (int i = 0 ; i != open.size() ; i++)
{
std::cout << "box " << i << (open[i] ? " open" : " closed") << std::endl;
}
}
};
int main (void)
{
boxes sample (10);
sample.trace();
return 0;
}
выход:
box 0 closed
box 1 closed
box 2 open
box 3 open
box 4 closed
box 5 open
box 6 open
box 7 open
box 8 open
box 9 closed