如何向后打印由 C 中的数组表示的矩阵列?



我正在开发从输入文件中获取矩阵的程序,如下所示。 其中第一行表示矩阵的参数 - 行,列,0 表示更改奇数列,1 表示更改偶数列

5 5 0
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

现在我必须取奇数克罗蒙(例如:7 4 1(并向后打印,这样它看起来像这样 ( 1 4 7 ( 如果我有 3x3 矩阵,它看起来像:

1 2 3
4 5 6
7 8 9

向后打印奇数列的输出矩阵

7 2 9
4 5 6
1 8 3

这是我到目前为止的代码

int r = 0, c = 0, odds = 0,n = 0,i,j;
FILE *fp,*fp2;
fp = fopen(argv[1],"r");
fp2 = fopen(argv[2],"w");
if(!fp){
printf("file doesnt existn");
}
if(!fp2){
printf("file doesnt existn");
}
fscanf(fp,"%d %d %d", &r, &c, &odds);
n = r *c;
int* matrix= (int*)malloc(r*c* sizeof(int));
for(int i = 0; i < n; i++)
{
fscanf(fp,"%d",&matrix[i]);
}
if(odds == 0){
for(int i = 0; i < n; i++){
if(i%2==0){
matrix[i] = i;
}
}
}else if(odds == 1){
for(int i = 0; i < n; i++){
if(i%2!=0){
matrix[i] =  ;
}
} 
}


for(i = 0;i < n; i++)
{    
if(i % s == 0 ){
fprintf(fp2,"n");
}
fprintf(fp2,"%d ",matrix[i]);

}
fclose(fp);
fclose(fp2);
return 0;

}

我的问题是倒退 cols,这应该在这里发生

if(odds == 0){
for(int i = 0; i < n; i++){
if(i%2==0){
matrix[i] = i;
}
}
}else if(odds == 1){
for(int i = 0; i < n; i++){
if(i%2!=0){
matrix[i] =  ;
}
} 
}

第一个 if 用于向后打印偶数列,第二个用于奇数列 如您所见,矩阵在我的程序中由普通数组表示 这不是我的主意,而是老师,所以它应该像这样工作

1 2 3|4 5 6|7 8 9  ----> 7 2 9|4 5 6|1 8 3

好的,我刚刚发现了地图索引,所以现在数组中的每个位置都显示为矩阵[j+(i*r(],所以例如上面 3x3 矩阵中的第一个位置将是这样的:矩阵[1+(0*3(],第 4 个位置将是矩阵[1+(1*3(] 等......

所以现在我的问题是如何索引列中的相反位置。

代码更新:

for(int i = 0; i < r; i++){
for(int j = 1; j < c; j++){
if(i%2!=0){
matrix[j+i*r] = ....;
}
}
}

在这两种情况下,您都希望将矩阵[i]替换为矩阵中更靠后的元素。

n n
1 2 3
4 5 6
7 8 9

在此用于替换奇数值的示例中,应切换 1 和 7。指数的差异为6。但是,这取决于矩阵尺寸。一般公式为:

n^2 - n - r*(2n) + i

"是您所在的行。由于您正在翻转矩阵,因此您只需要执行最多 (n-n%2(/2 的行。

这里有一些 python 代码需要澄清

for i in range(0,int((matrixdim-matrixdim%2)/2)*matrixdim):     
if ((i-r)%2) == 0:
temp = matrix[i]
matrix[i] = matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i]
matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i] = temp
if ((i+1)%matrixdim) == 0:
r += 1

使用 i,j 表示法

for i in range(0,int((matrixdim-matrixdim%2)/2)):
for j in range(0, matrixdim):
pos = j + matrixdim*i
temp = matrix[pos]
if j%2 == even:
matrix[pos] = matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos]
matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos] = temp 

最新更新