我有以下代码。我将每个框设置为1.现在我想一次设置3个框为0.如果不手动将每个框设置为1,我该怎么做?
是否有一个排列公式,将当时设置3为1?
content-wrap
打印这个看起来像。
struct __long
{
size_type __cap_;
size_type __size_;
pointer __data_;
};
现在我该如何打印
#include <iostream>
using namespace std;
int main()
{
int array[2][2];
for (int x = 0; x<2; x++)
{
for (int y = 0; y<2; y++)
array[x][y] = 1;
}
// display all cells to see that all of them are set to zero
cout << "diplaying" << endl;
for (int x = 0; x<2; x++)
{
for (int y = 0; y<2; y++)
cout << array[x][y] << " " ;
cout << endl;
}
和
1 1
1 1
和
0 1
0 0
和
1 0
0 0
不必单独设置它们吗?
答案 0 :(得分:5)
就个人而言,我会将数组存储为大小为std::vector<int>
的1D n*n
。然后你可以非常简单地在它上面调用std::next_permutation()
。 (值得注意的是,您不必使用std::vector
;只要它在内存中是连续的,您就应该能够正确使用std::next_permutation()
你必须做的唯一事情就是你的排列逻辑&#34; 2D&#34;打印它的行为。但是,你的循环as-is应该正确处理,所以也没有问题。
编辑:重新阅读您的代码后,您无法按原样使用此代码。相反,您应该将1D std::vector
初始化为0,除了位置0处的1之外。然后,这样的排列将产生您想要的输出。
此外,您的打印循环不会正确打印出阵列。你可能想要:
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
std::cout << vector[i*2+j] << " " ;
}
std::cout << std::endl;
}
答案 1 :(得分:0)
仔细阅读后,我用这种方式解释了你的问题: 你想从这个
1 1
1 1
到这个
0 1
0 0
使用for
子句。
如果你只是想让一个单元格保持不变......你可以保存它并在用0
填充数组后恢复它。
memo = array[0][1];
for (int x = 0; x<2; x++) {
for (int y = 0; y<2; y++) {
array[x][y] = 0;
}
}
array[0][1] = memo;
如果那是你想做的事。
&#34;字符串数组&#34;顺便说一句..?
答案 2 :(得分:-1)
我会编写一个打印全零的函数,除非需要打印实际值,然后使用不同的索引调用此函数以获得所需的效果。
#include <iostream>
using namespace std;
#define SZ 2
void printValue(int a [SZ][SZ], int x, int y)
{
for(int i=0; i<SZ; ++i )
{
for(int j=0; j<SZ; ++j)
{
if(i==x && j==y) cout<<a[i][j];
else cout<<"0";
cout<<" ";
}
cout<<endl;
}
}
现在您可以在for循环中使用此函数
int main()
{
int arr[SZ][SZ];
for (int x = 0; x<SZ; x++)
{
for (int y = 0; y<SZ; y++)
arr[x][y] = 1;
}
// display all cells to see that all of them are set to zero
cout << "diplaying" << endl;
for (int x = 0; x<SZ; x++)
{
for (int y = 0; y<SZ; y++)
cout << arr[x][y] << " " ;
cout << endl;
}
//now display all combos:
for(int i=0; i<SZ; ++i)
{
for(int j=0; j<SZ; ++j)
{
printValue(arr, i,j);
}
cout<<"\n\n";
}
}