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

0

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

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

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

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

  • 0
    Можете ли вы поделиться своим кодом?
  • 1
    Я собираюсь дать модуль модуля, а затем я буду. Спасибо!
Теги:
arrays
nested
elements

2 ответа

2
Лучший ответ

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

1

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

Чтобы переключить логическое значение, просто используйте "не" логический оператор.

#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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню