Пометка элементов массива C ++ с вложенным циклом

Есть ли способ, которым я могу пометить элемент в массиве типа включения и выключения, или назад и вперед между определенным целым числом, таким как 1 и 2 внутри вложенного цикла. Я очень застрял на домашнем задании. В основном у меня есть 150 элементов в массиве, и почтальон просматривает и открывает ящики с кратными 2, а затем кратными 3, и если он попадает в ящик, который уже был открыт с кратным 2, он закрывает его, а затем он идет через 150 почтовых ящиков с кратными 4 и так далее до 150, и он закрывает ящик, если он уже открыт, и открывает закрытые ящики, пока внешний цикл не достигнет 150, и все числа не будут использованы

Я пробовал логические операторы if и if, и просто кучу дополнительных встречных переменных, и знаю, как эффективно это сделать

Я заставил его работать один раз, но код был настолько неряшливым, что я просто поцарапал его, потому что это был, вероятно, неправильный ответ в любом случае

Конечно, я не пытаюсь обмануть в своем курсе, но я прочитал эту главу несколько раз, провел многочисленные поиски в Интернете, и я заблудился. Я не спрашиваю код, я просто хочу понять, как лучше всего пометить или пометить элементы в массиве

0

Решение

Используйте оператор модуля: % проверить остаток.

2

Другие решения

Вот один пример, который делает то, что вы описываете.

Чтобы переключить логическое значение, просто используйте логический оператор «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
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector