有没有办法可以在一个数组中标记一个元素的开关,或者在嵌套循环内部的特定整数(如1和2)之间来回标记。我很难完成作业。基本上我有一个阵列中有150个元素,一个邮递员正在通过并打开2的倍数,然后是3的倍数,如果他打了一个已经打开了2的倍数的盒子,他就关闭它然后他去了通过150个邮箱的倍数为4,依此类推,直到150,如果它已经打开,他会关闭一个盒子,并打开关闭的盒子,直到外圈达到150并且所有数字都已被使用
我尝试过boolean和if语句,只是一堆额外的计数器变量,而idk如何有效地做到这一点
我让它工作了一次,但是代码非常粗糙,我只是抓了它,因为它可能是错误的答案
无论如何,我并不想在我的课程中作弊,但我已经多次阅读这一章,并且已经进行了大量的互联网搜索,我迷失了。我不是要求代码,我只是想知道在数组中标记或标记元素的最佳方法是什么答案 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