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