使用/ Nested循环标记元素C ++数组

时间:2014-02-04 07:04:01

标签: c++ arrays nested elements

有没有办法可以在一个数组中标记一个元素的开关,或者在嵌套循环内部的特定整数(如1和2)之间来回标记。我很难完成作业。基本上我有一个阵列中有150个元素,一个邮递员正在通过并打开2的倍数,然后是3的倍数,如果他打了一个已经打开了2的倍数的盒子,他就关闭它然后他去了通过150个邮箱的倍数为4,依此类推,直到150,如果它已经打开,他会关闭一个盒子,并打开关闭的盒子,直到外圈达到150并且所有数字都已被使用

我尝试过boolean和if语句,只是一堆额外的计数器变量,而idk如何有效地做到这一点

我让它工作了一次,但是代码非常粗糙,我只是抓了它,因为它可能是错误的答案

无论如何,我并不想在我的课程中作弊,但我已经多次阅读这一章,并且已经进行了大量的互联网搜索,我迷失了。我不是要求代码,我只是想知道在数组中标记或标记元素的最佳方法是什么

2 个答案:

答案 0 :(得分:2)

使用模数运算符:%检查余数。

答案 1 :(得分:1)

这是一个做你所描述的例子。

要切换布尔值,只需使用“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