【问题标题】:Treating an array of bools as though incrementing in binary [duplicate]将布尔数组视为二进制递增[重复]
【发布时间】:2015-03-19 14:24:55
【问题描述】:

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

例如

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

等等

然而,这个数组是动态的,并且可以是不同的大小。所以无论我写什么循环都需要在一个包含五个元素而不是三个元素的数组上工作。

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

【问题讨论】:

  • 写一些类似的东西,但更简单。编写一个循环,只迭代大小为 1 的数组。然后尝试 3。然后尝试 n。 “我不可能开始任何事情”不太可信。
  • 照样做,你在学校学过大数的加法(冒号和冒号结转)

标签: c++ arrays loops binary


【解决方案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;
}

【讨论】:

  • 这段代码不依赖于cout &lt;&lt; (array[i] ? 1 : 0)这一行,对吧?它仍然存储所有必要的值,然后如果array[i] 为真则输出真,如果array[i] 为假则输出假? if语句中的return只是迭代for循环,不退出函数?我实际上需要在我的函数中返回一个值
  • main() 中的嵌套数组仅用于显示值。为了清楚起见,increment() 函数是分开的。你可以把它带到 main() 本身。然后用break替换return。
  • 添加 for 循环 for(int i = 0; i &lt; len;i++) 会完成 main 中的 for 循环正在做的事情(在这种情况下是 10 次而不是 5 次)?然后可以单独进行打印。由于某种原因,当我尝试将打印和增量分开时,增量功能停止工作。
  • 试试这个没有单独功能的。您需要在每次迭代中打印以获取每次迭代后的状态。 ideone.com/SxL38k
【解决方案2】:
#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2016-08-18
    • 2011-08-02
    • 2011-07-28
    • 2017-02-20
    • 1970-01-01
    • 2013-02-10
    相关资源
    最近更新 更多