所以我试图做的是将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");
}
答案 0 :(得分:1)
我没有在行
中遵循你的逻辑 A[x][y] = 1*x + y;
我似乎更接近%
:
A[x][y] = (1+x + y) % 10;
当除以10时,它取x
和y
之和的余数 - 如果我们从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)开始填充,并始终从第一行复制值。但是,它复制到的当前行中的位置会被行号偏移,因此每行开始一个位置。 %
运算符用于在索引结束时将索引回绕到行的开头。