Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 如何使用前一行的右移值初始化8x10矩阵的每一行_C - Fatal编程技术网

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

C 如何使用前一行的右移值初始化8x10矩阵的每一行,c,C,所以我要做的是让8x10矩阵的第一行显示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;

所以我要做的是让8x10矩阵的第一行显示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");
    }
#包括
#定义第8行
#定义COLS 10
int main(int argc,char*argv[])
{
int A[行][COLS];
int B[COLS][ROWS];
int x,y;

对于(x=0;x我没有遵循你的逻辑

    A[x][y] = 1*x + y;
使用
%
,我似乎离得更近了:

        A[x][y] = (1+x + y) % 10;
这将取
x
y
之和除以10的剩余部分-如果我们从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");
  }
}
#包括
#定义第8行
#定义COLS 10
int main(int argc,char*argv[]){
int A[行][COLS];
int B[COLS][ROWS];
int x,y;

对于(x=0;xFirst,只需在第一行中填入所需内容即可。例如,对于从零开始计数的数字:

for (y = 0; y < COLS; y++)
  A[0][y] = y;
(y=0;y A[0][y]=y;
填充第一行后,将按照所述填充其余的行(每行从上一行右转一行):

(x=1;x 对于(y=0;y

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

更直观的解决方案是
a[x][y]=A[0][(x+y)%COLS]
@Suryavanshi从
A[x][(x+y)%COLS]=A[0][y]
A[x][y]=A[0][(x+y)%COLS]
反转换档方向。正确的解决方案是
A[x][y]=A[0][(abs(COLS+y-x))%COLS]
这在计算上是不必要的昂贵,我不是这么说的。
for (x = 1; x < ROWS; x++)
  for (y = 0; y < COLS; y++)
    A[x][(x + y) % COLS] = A[0][y];