C++ 将布尔数组视为二进制递增

C++ 将布尔数组视为二进制递增,c++,arrays,loops,binary,C++,Arrays,Loops,Binary,我试图创建一个循环来更改布尔数组中的值,使数组看起来像是以二进制值递增 比如说 1st iteration [0|0|0] 2nd iteration [0|0|1] 3rd iteration [0|1|0] 4th iteration [0|1|1] 等等 但是,此数组是动态的,大小可以不同。所以,无论我写什么循环,都需要处理一个包含五个元素而不是三个元素的数组 很抱歉没有任何开始代码,但我已经为此感到沮丧好几个小时了,仍然想不出如何开始。试试。这可能不完整,但您可以做类似的事情 #inc

我试图创建一个循环来更改布尔数组中的值,使数组看起来像是以二进制值递增

比如说

1st iteration [0|0|0]
2nd iteration [0|0|1]
3rd iteration [0|1|0]
4th iteration [0|1|1]
等等

但是,此数组是动态的,大小可以不同。所以,无论我写什么循环,都需要处理一个包含五个元素而不是三个元素的数组

很抱歉没有任何开始代码,但我已经为此感到沮丧好几个小时了,仍然想不出如何开始。

试试。这可能不完整,但您可以做类似的事情

#include <iostream>
using namespace std;

void increment(bool* array, int len)
{
    for (int i = len - 1; i >= 0; --i)
    {
        if ( ! array[i])
        {
            array[i] = true;
            return;
        }
        array[i] = false;
    }
}

int main()
{
    bool* array = new bool[10];

    for (int i = 0; i < 5; ++i)
    {
        increment(array, 10);

        for (int i = 0; i < 10; ++i)
        {
            cout << (array[i] ? 1 : 0) << "|";
        }
        cout << endl;
    }

    return 0;
}
#包括
使用名称空间std;
无效增量(布尔*数组,整数长度)
{
对于(int i=len-1;i>=0;--i)
{
如果(!数组[i])
{
数组[i]=true;
返回;
}
数组[i]=false;
}
}
int main()
{
bool*数组=新bool[10];
对于(int i=0;i<5;++i)
{
增量(数组,10);
对于(int i=0;i<10;++i)
{
不能包含
#包括
#包括
使用名称空间std;
空数组元(int);
void打印数组(bool*,int);
void arrayinterate(int arraySize)
{
整数十进制_值=0;
整数小数位值=0;
bool*boolArray=新bool(阵列化);
长双最大值=功率(2,阵列化);
对于(int i=0;i=0;--k)
{
小数位值=功率(2,k);
如果(十进制值!=0&&十进制值/十进制位值>=1)
{
boolArray[k]=真;
十进制值-=十进制位值;
}
其他的
boolArray[k]=假;
}
打印阵列(boolArray,arraySize);

不能写类似的东西,但更简单。写一个循环,只迭代大小为1的数组。然后尝试3。然后尝试n。“我不可能开始任何事情”不是很可信。同样的方法,你在学校已经学会了大数加法(冒号和结转)此代码不依赖于main()中的行
cout嵌套数组仅用于显示值。为了清晰起见,increment()函数是分开的。您可以将其带到main()本身。然后将return替换为break。添加for循环
for(int i=0;i
会完成main中for循环的工作吗(在这种情况下是10次而不是5次)?然后可以分别进行打印。出于某种原因,当我尝试将打印和递增分开时,递增函数停止工作。尝试一下这个没有单独函数的函数。您需要在每次迭代中打印,以获得每次迭代后的状态。
#include <iostream>
#include <cmath>
#include <memory>

using namespace std;

void ArrayIterate(int);
void printArray(bool*,int);

void ArrayIterate(int arraySize)
{
    int decimal_value = 0;
    int decimal_place_value = 0;
    bool* boolArray = new bool(arraySize);
    long double max_itr = pow(2,arraySize);
    for (int i = 0; i < max_itr ; ++i)
    {
        decimal_value = i;
        // set array values
        for ( int k = arraySize - 1; k >= 0; --k)
        {
            decimal_place_value = pow(2,k);
            if( decimal_value != 0 && decimal_value / decimal_place_value >= 1 )
            {
                boolArray[k] = true;
                decimal_value -= decimal_place_value;
            }
            else
                boolArray[k] = false;
        }
        printArray(boolArray,arraySize);
        cout << " = " << i << endl; ;
    }
    delete boolArray;
    return;
}

void printArray(bool* boolArray, int arraySize)
{
    cout << "\t";
    for(int i = arraySize - 1; i >= 0; --i)
        cout << ((boolArray[i] == true)? 1 : 0) << " ";
    return;
}

int main()
{
    cout << "\n\n";
    ArrayIterate(4); 
    cout << "\n\n" << endl;
    return 0;
}