2014-02-04 1 views
0

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

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

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

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

+0

Можете ли вы поделиться код? – Ayse

+1

Я собираюсь дать модуль выстрел, и тогда я это сделаю. Благодаря! – bigdog225

ответ

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