如何使用前一行的右移位值初始化8x10矩阵的每一行

时间:2014-03-19 03:18:28

标签: c

所以我试图做的是将8 x 10矩阵的第一行称为12345678910.第二行表示10123456789.第三行表示91012345678.等。这就是我到目前为止所拥有的。它只是继续数数。

#include<stdio.h>


#define ROWS 8
#define COLS 10

int main(int argc, char *argv[])
{
    int A[ROWS][COLS];
    int B[COLS][ROWS];
    int x,y;


    for (x=0; x<ROWS; x++)
    {
        for (y=0; y<COLS; y++)
        {
            A[x][y] = 1*x + y;
        }
    }


    printf("=== Original matrix === \n");

    for (x=0; x<ROWS; x++)
    {
        for (y=0; y<COLS; y++)
        {
            printf("%3d  ", A[x][y]);
        }
        printf("\n");
    }

2 个答案:

答案 0 :(得分:1)

我没有在行

中遵循你的逻辑
    A[x][y] = 1*x + y;

我似乎更接近%

        A[x][y] = (1+x + y) % 10;

当除以10时,它取xy之和的余数 - 如果我们从1开始而不是0,则开始接近你想要的。这不完全正确,但它是一个开始。

=== Original matrix === 
  1    2    3    4    5    6    7    8    9    0  
  2    3    4    5    6    7    8    9    0    1  
  3    4    5    6    7    8    9    0    1    2  
  4    5    6    7    8    9    0    1    2    3  
  5    6    7    8    9    0    1    2    3    4  
  6    7    8    9    0    1    2    3    4    5  
  7    8    9    0    1    2    3    4    5    6  
  8    9    0    1    2    3    4    5    6    7 

以下是代码:

#include <stdio.h>

#define ROWS 8
#define COLS 10

int main(int argc, char* argv[]) {
    int A[ROWS][COLS];
    int B[COLS][ROWS];
    int x,y;
    for (x=0; x<ROWS; x++) {
        for (y=0; y<COLS; y++) {
            A[x][y] = (1+x + y) % 10;
        }
    }
    printf("=== Original matrix === \n");
    for (x=0; x<ROWS; x++) {
        for (y=0; y<COLS; y++) {
            printf("%3d  ", A[x][y]);
        }
        printf("\n");
  }
}

答案 1 :(得分:1)

首先,只需在第一行填写您想要的任何内容即可。例如,对于从零开始计数的数字:

for (y = 0; y < COLS; y++)
  A[0][y] = y;

填好第一行后,这将填充您所描述的剩余行(每行从上一行右旋一个):

for (x = 1; x < ROWS; x++)
  for (y = 0; y < COLS; y++)
    A[x][(x + y) % COLS] = A[0][y];

以上开始从第二行(索引1)开始填充,并始终从第一行复制值。但是,它复制到的当前行中的位置会被行号偏移,因此每行开始一个位置。 %运算符用于在索引结束时将索引回绕到行的开头。