C++ 如何创建二维字符串数组的排列?
我有以下代码。我将每个框设置为1。现在我想一次将3个框设置为0。如何在不手动将每个值设置为1的情况下执行此操作 是否有一个置换公式,可以将3设置为1C++ 如何创建二维字符串数组的排列?,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
#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
的1Dstd::vector
。然后你可以很简单地调用它。(值得注意的是,您不必使用std::vector
;只要它在内存中是连续的,就应该能够正确地使用std::next_permutation()
)
你要做的唯一一件事就是把你的排列逻辑打印出来。然而,您的循环应该正确地处理这一点,因此也不会出现任何问题
编辑:重新读取代码后,无法按原样使用。相反,您应该将1Dstd::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
的1Dstd::vector
。然后您可以非常简单地调用它。(值得注意的是,您不必使用std::vector
;只要它在内存中是连续的,就应该能够正确地使用std::next_permutation()
)
要使置换逻辑成为“2D”,唯一需要做的就是将其打印出来。然而,您的循环应该正确地处理它,因此也不会出现任何问题
编辑:在重新读取代码时,您不能按原样使用它。相反,您应该将1Dstd::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你最好相信它,伙计!