C++ 如何创建二维字符串数组的排列?

C++ 如何创建二维字符串数组的排列?,c++,C++,我有以下代码。我将每个框设置为1。现在我想一次将3个框设置为0。如何在不手动将每个值设置为1的情况下执行此操作 是否有一个置换公式,可以将3设置为1 #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。现在我想一次将3个框设置为0。如何在不手动将每个值设置为1的情况下执行此操作

是否有一个置换公式,可以将3设置为1

#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;
 }
现在我怎么打印

0   1          

0   0


不必这样单独设置它们?

我个人会将数组存储为大小为
n*n
的1D
std::vector
。然后你可以很简单地调用它。(值得注意的是,您不必使用
std::vector
;只要它在内存中是连续的,就应该能够正确地使用
std::next_permutation()

你要做的唯一一件事就是把你的排列逻辑打印出来。然而,您的循环应该正确地处理这一点,因此也不会出现任何问题

编辑:重新读取代码后,无法按原样使用。相反,您应该将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;
}
for(int i=0;i<2;++i){
对于(int j=0;j<2;++j){

std::cout就个人而言,我会将数组存储为大小为
n*n
的1D
std::vector
。然后您可以非常简单地调用它。(值得注意的是,您不必使用
std::vector
;只要它在内存中是连续的,就应该能够正确地使用
std::next_permutation()

要使置换逻辑成为“2D”,唯一需要做的就是将其打印出来。然而,您的循环应该正确地处理它,因此也不会出现任何问题

编辑:在重新读取代码时,您不能按原样使用它。相反,您应该将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;
}
for(int i=0;i<2;++i){
对于(int j=0;j<2;++j){

std::cout我将编写一个函数,除了需要打印实际值的地方之外,它将打印所有的零,然后使用不同的索引调用此函数以获得所需的效果

#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;
    }
}
#包括
使用名称空间std;
#定义SZ 2
无效打印值(整数a[SZ][SZ],整数x,整数y)
{

对于(int i=0;i我将编写一个函数,该函数将打印除需要打印实际值之外的所有零,然后使用不同的索引调用该函数以获得所需的效果

#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;
    }
}
#包括
使用名称空间std;
#定义SZ 2
无效打印值(整数a[SZ][SZ],整数x,整数y)
{

对于(int i=0;i仔细阅读后,我对你的问题的解释如下: 你想从这开始吗

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;
memo=array[0][1];

对于(int x=0;x仔细阅读后,我对你的问题的解释如下: 你想从这开始吗

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;
memo=array[0][1];

对于(int x=0;x用一个小公式或一个逻辑来做。这不应该编译,
x
在第二个循环中不在范围内。@UlrichEckhardt是的,看起来有些代码被卡在了注释中。用一个小公式或逻辑来做。这不应该编译,
x
在第二个循环中不在范围内。@UlrichEckhardtond循环。@UlrichEckhardt是的,看起来有些代码卡在了注释
\define
?真的吗?@UlrichEckhardt你最好相信它,伙计!
\define
?真的吗?@UlrichEckhardt你最好相信它,伙计!