处理一系列bool,就好像以二进制递增一样

时间:2015-01-21 06:31:24

标签: c++ arrays loops binary

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

例如

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

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

抱歉没有任何启动代码,但我几个小时以来一直在为此感到沮丧,甚至无法想出如何开始。

2 个答案:

答案 0 :(得分:1)

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

#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;
}

答案 1 :(得分:0)

#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;
}