21xrx.com
2024-11-22 09:49:54 Friday
登录
文章检索 我的文章 写文章
C++编写二维数组右移1位
2023-07-06 11:59:04 深夜i     --     --
C++ 二维数组 右移 1位

在C++中,我们可以使用二维数组来存储和操作矩阵。有时候,我们需要将这个二维数组进行一些位移操作,比如向右移动一位。在本文中,我们将介绍如何使用C++编写一个简单的程序来实现这个操作。

首先,让我们看一下如何定义一个二维数组。我们可以使用类似于以下的方式来定义和初始化一个二维数组:


int matrix[3][3] = {

  2,

  6,

  9

};

这个二维数组表示了一个3×3的矩阵,其中每一个元素都被初始化为指定的值。现在,我们将尝试将这个矩阵向右移动一位。

首先,我们需要明确一下移动后的矩阵的形式。向右移动一位,相当于每一行的元素都向右平移一位,并且最右边的元素变成最左边的元素。也就是说,上面的矩阵向右移动一位后,变成了以下的形式:


{

  2,

  4,

  8

}

那么,如何实现这个操作呢?我们可以使用一个循环来遍历每一行,并且将每一行的元素向右移动。具体的实现代码如下:


int temp = matrix[i][cols-1];

for (int j = cols-1; j > 0; j--) {

 matrix[i][j] = matrix[i][j-1];

}

matrix[i][0] = temp;

这段代码将最右边的元素保存到一个临时变量中,然后使用一个循环将每一个元素向右移动一位,并将临时变量的值赋给最左边的元素。

完整的代码如下所示:


#include <iostream>

using namespace std;

int main()

{

  int matrix[3][3] = {

   {1, 2, 3},

   {4, 5, 6},

   {7, 8, 9}

  };

  int rows = 3;

  int cols = 3;

  for (int i = 0; i < rows; i++) {

    int temp = matrix[i][cols-1];

    for (int j = cols-1; j > 0; j--) {

      matrix[i][j] = matrix[i][j-1];

    }

    matrix[i][0] = temp;

  }

  for(int i = 0; i < rows; i++) {

    for(int j = 0; j < cols; j++) {

      cout << matrix[i][j] << " ";

    }

    cout << endl;

  }

  return 0;

}

这段代码首先定义了一个3×3的矩阵,并且使用两个嵌套的循环遍历了每一个元素,进行了向右移动的操作。最后,它输出了移动后的矩阵。

在实际的程序中,我们可能需要根据需求对不同大小的矩阵进行位移操作。这时候,我们可以将上面的代码进行封装,以便于我们复用。具体来说,我们可以将位移操作写成一个函数,并且传入矩阵和位移的步长。下面是一个示例代码:


#include <iostream>

using namespace std;

void matrix_shift(int matrix[100][100], int rows, int cols, int shift)

{

  for (int i = 0; i < rows; i++) {

    int temp[100] = {0};

    for (int j = 0; j < cols; j++) {

      int idx = (j + shift) % cols;

      temp[idx] = matrix[i][j];

    }

    for (int j = 0; j < cols; j++) {

      matrix[i][j] = temp[j];

    }

  }

}

int main()

{

  int matrix[3][3] = {

   {1, 2, 3},

   {4, 5, 6},

   {7, 8, 9}

  };

  int rows = 3;

  int cols = 3;

  matrix_shift(matrix, rows, cols, 1);

  for(int i = 0; i < rows; i++) {

    for(int j = 0; j < cols; j++) {

      cout << matrix[i][j] << " ";

    }

    cout << endl;

  }

  return 0;

}

这个函数采用了一种更加简单的实现方式,可以适用于任何大小的矩阵。它首先使用一个临时数组来保存位移后的元素顺序,然后再将它赋值回原来的矩阵。这个方法虽然需要额外的空间来保存数据,但是它的实现更加简单易懂。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复