如何解决创建一个矩阵,其中的元素被另一个矩阵采用
我必须实现一个函数,给定一个由 0 和 1 组成的矩阵,它返回一个包含 1 坐标的新矩阵。例如:如果矩阵是 3x3 并且输出是:
1 0 1
0 1 1
0 0 1
新矩阵为 5x2,输出为:
0 0
0 2
1 1
1 2
2 2
一些建议?我的方法是这样的:
int matrix[3][3];
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (matrix[i][i] == 1){
//Code i need
}
}
}
解决方法
如果 matrix[i][j] == 1
你知道坐标 [i,j]
吗?它们是 1
:)
其次,输入矩阵是否总是 3x3?如果没有,您需要将矩阵的维度存储在变量中,并将这些变量用于 for
循环。
解决方案实际上取决于需求:
- 是否允许分配最大可能大小的结果矩阵(在本例中为 9 x 2)。
- 如果第 1 点不允许,是否严格要求使用固定大小的数组(无动态分配)。如果是这种情况,则可能需要传递矩阵两次以分配正确大小的数组。
其他解决方案当然是使用动态分配(使用 malloc 等)。
选项 1 和 2 的简化版本如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int matrix[3][3];
matrix[0][0] = 1;
matrix[0][1] = 0;
matrix[0][2] = 1;
matrix[1][0] = 0;
matrix[1][1] = 1;
matrix[1][2] = 1;
matrix[2][0] = 0;
matrix[2][1] = 0;
matrix[2][2] = 1;
//Solution 1 - If allowed to allocate matrix with size more than the result,//i.e. if input is 3x3 matrix,then the maximum size of result matrix is 9 x 2
int resultMatrix1[9][2];
int usedCount1=0;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++) {
if (matrix[i][j] == 1) {
resultMatrix1[usedCount1][0] = i;
resultMatrix1[usedCount1][1] = j;
usedCount1++;
} //end if
} //end for
} //end for
//Print the result
printf("\nSolution 1\n");
for (int i = 0; i < usedCount1; i++){
printf("%d %d\n",resultMatrix1[i][0],resultMatrix1[i][1]);
} //end for
//Solution 2 - strictly allocate matrix with size equal to the result.
//Without using dynamic allocation,meaning we need to have two passes.
//1st pass is to count the element which satisfy the criteria
int usedCount2=0;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++) {
if (matrix[i][j] == 1) {
usedCount2++;
} //end if
} //end for
} //end for
int resultMatrix2[usedCount2][2]; //allocate the right size
int idx=0;
//2nd pass is to fill in the result matrix
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++) {
if (matrix[i][j] == 1) {
resultMatrix2[idx][0] = i;
resultMatrix2[idx][1] = j;
idx++;
} //end if
} //end for
} //end for
//Print the result
printf("\nSolution 2\n");
for (int i = 0; i < usedCount2; i++){
printf("%d %d\n",resultMatrix2[i][0],resultMatrix2[i][1]);
} //end for
return 0;
}
两种解决方案的结果相同:
Solution 1
0 0
0 2
1 1
1 2
2 2
Solution 2
0 0
0 2
1 1
1 2
2 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。