我正在研究这样从输入文件获取矩阵的程序。其中第一行代表矩阵的参数-row,cols,0用于更改奇数cols,1用于更改偶数cols
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)并向后打印它,所以如果我有3x3矩阵,它将看起来像这样(1 4 7),它看起来像是:
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 exist\n");
}
if(!fp2){
printf("file doesnt exist\n");
}
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] = ;
}
}
}
第一个用于向后打印偶数列,第二个用于奇数列如您所见,矩阵在我的程序中由普通数组表示这不是我的主意,而是老师,所以它应该像这样工作
1 2 3|4 5 6|7 8 9 ----> 7 2 9|4 5 6|1 8 3
好,我刚刚发现了有关地图索引的信息,所以现在数组中的每个位置都表示为matrix [j +(i * r)],因此例如上述3x3矩阵中的第一个位置将是这样的:matrix [1+( 0 * 3)],第四个pos是矩阵[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
其中r是您所在的行。由于要翻转矩阵,因此您只需要进行最多(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