Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何以之字形顺序遍历二维阵列_C++_Arrays_Zigzag - Fatal编程技术网

C++ 如何以之字形顺序遍历二维阵列

C++ 如何以之字形顺序遍历二维阵列,c++,arrays,zigzag,C++,Arrays,Zigzag,我们有一个int2D数组,如下所示: int matrix[4][4] = {{1,2,3,4} {5,6,7,8} {9,10,11,12} {13,14,15,16}}; 按照惯例,如果我们想按顺序打印阵列,我们可以: for (int x=0; x<4; x++) { for (int y=0; y<4; y++) { co

我们有一个
int
2D数组,如下所示:

int matrix[4][4] =
{{1,2,3,4}
{5,6,7,8}
{9,10,11,12}
{13,14,15,16}};
按照惯例,如果我们想按顺序打印阵列,我们可以:

    for (int x=0; x<4; x++)
    {
        for (int y=0; y<4; y++) 
        {                                        
            cout << matrix[x][y] << "  ";
        }   
        cout << endl;               
    }
我的问题是:我们如何以之字形顺序遍历2D数组。例如,打印数组值,如下所示:

 1  2  3  4  
 8  7  6  5
 9 10 11 12
16 15 14 13
这是一个解决方案(在编辑原始问题之前,您要求在不使用if()或条件的情况下解决原始问题):

#包括
使用名称空间std;
int main()
{
整数矩阵[4][4]=
{{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};
布尔向后=假;
整数增量=1;
对于(int x=0;x<4;x++)
{
int index=3*向后;
对于(int y=0;y,这里有一个解决方案(在编辑原始问题之前,您要求在不使用if()或条件的情况下解决原始问题):

#包括
使用名称空间std;
int main()
{
整数矩阵[4][4]=
{{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};
布尔向后=假;
整数增量=1;
对于(int x=0;x<4;x++)
{
int index=3*向后;
对于(inty=0;y

bool r=false;
for (int x=0; x<4; x++)
{
    for (int y=0; y<4; y++)
    {
        cout << matrix[x][r ? 3-y : y] << "  ";
    }
    cout << endl;
    r = !r;
}
bool r=false;
对于(intx=0;x

bool r=false;
for (int x=0; x<4; x++)
{
    for (int y=0; y<4; y++)
    {
        cout << matrix[x][r ? 3-y : y] << "  ";
    }
    cout << endl;
    r = !r;
}
bool r=false;

对于(int x=0;x这里有一个解决方案,其中包含一个
for
-循环

#include <iostream>
using namespace std;

int matrix[][4] = { { 0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}};

int main() {
  for (int x=0; x<16; x++) {
    cout << matrix[x/4][ x%4 * ((x/4+1)&1) + (3-x%4)*((x/4)&1) ] << "  ";
    if (x%4==3) cout << endl;
  }
  return 0;
}
#包括
使用名称空间std;
int矩阵[][4]={0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15};
int main(){

对于(int x=0;x
(x/4)&1

这里有一个带有单个
for
-loop的解决方案

#include <iostream>
using namespace std;

int matrix[][4] = { { 0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}};

int main() {
  for (int x=0; x<16; x++) {
    cout << matrix[x/4][ x%4 * ((x/4+1)&1) + (3-x%4)*((x/4)&1) ] << "  ";
    if (x%4==3) cout << endl;
  }
  return 0;
}
#包括
使用名称空间std;
int矩阵[][4]={0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15};
int main(){

对于(intx=0;x
(x/4)&1

而言,这是一种更简单、更容易理解的方法

#include <iostream>
using namespace std;
int main() {
    // your code goes here
    int matrix[4][4] = { { 0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}};
    bool forward = true;
    int j;
    for(int i = 0,k=0;i<4;i++)
    {
        if(forward)
        {
            for(j=0;j<4;j++)
            {
                cout<<matrix[i][j]<<" ";
            }
            cout<<endl;
            forward = false;
        }
        else
        {
            for(j=3;j>=0;j--)
            {
                cout<<matrix[i][j]<<" ";
            }
            cout<<endl;
            forward = true;
        }
    }
    return 0;
}
#包括
使用名称空间std;
int main(){
//你的密码在这里
int矩阵[4][4]={0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15};
布尔向前=真;
int j;

对于(inti=0,k=0;i而言,这是一种更简单且易于理解的方法

#include <iostream>
using namespace std;
int main() {
    // your code goes here
    int matrix[4][4] = { { 0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}};
    bool forward = true;
    int j;
    for(int i = 0,k=0;i<4;i++)
    {
        if(forward)
        {
            for(j=0;j<4;j++)
            {
                cout<<matrix[i][j]<<" ";
            }
            cout<<endl;
            forward = false;
        }
        else
        {
            for(j=3;j>=0;j--)
            {
                cout<<matrix[i][j]<<" ";
            }
            cout<<endl;
            forward = true;
        }
    }
    return 0;
}
#包括
使用名称空间std;
int main(){
//你的密码在这里
int矩阵[4][4]={0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15};
布尔向前=真;
int j;


对于(int i=0,k=0;ii如果你投票反对,请在这里留下你为什么这样做的评论。这样我下次可以改进。这个问题似乎离题了,因为它缺乏足够的信息来诊断问题。请更详细地描述你的问题,或者在问题本身中包含一个最小的例子。@πάνταῥεῖ 你还需要从这个问题中获得什么其他信息?这个问题和你在这里看到的一样直截了当。你在这里需要展示你自己的一些努力,你已经尝试过的东西等等。所以不是给我一个codez plz!服务。+1,用于反击:-)如果你否决了这个问题,请在这里留下你为什么这样做的评论。这样我下次可以改进。这个问题似乎离题了,因为它缺乏足够的信息来诊断问题。请更详细地描述你的问题,或者在问题本身中包含一个最小的例子。@πάνταῥεῖ 你还需要从这个问题中获得什么其他信息?这个问题和你在这里看到的一样直截了当。你在这里需要展示自己的一些努力,你已经尝试过的东西等等。所以不是一个Gimme teh codez plz!服务。+1,用于反击:-)我认为?算作if()指令。但是让OP决定。在OP编辑问题之前,指令是不要使用if()在解决方案中。@PaulMcKenzie哦,我从来没有看到过这个约束。我试图对问题的代码进行最小的更改,因此它不一定高效、优雅或任何东西。反正给了你+1。现在在OP的帖子中没有看到。我想?算作if()但是让OP决定。在OP编辑问题之前,指令不使用if()在解决方案中。@PaulMcKenzie哦,我从来没有看到过这个约束。我试图对问题的代码进行最小的更改,因此它不一定高效、优雅或任何东西。反正给了你+1。现在在OP的帖子中没有看到它。+1为你。我正在为你寻找类似于+1的解决方案。我正在寻找一个s解决方案与此类似