C语言中按列比较矩阵元素:统计大于等于同列元素次数
问题排查与修复
你的代码核心问题是没有按照「同列其余元素」的要求进行比较,而是错误地让每个元素和矩阵中所有元素(除自身外)做了对比,同时跳过自身的逻辑冗余且不符合需求,导致统计结果完全错误。
具体问题点
- 多了不必要的列循环:你加了
for(col=0;col<2;++col),这会让当前元素和所有列的元素对比,而不是只和**当前列(j列)**的元素对比。 - 跳过自身的条件错误:同列比较时,只需要排除当前行(
row != i)即可,不需要同时判断列,因为列已经固定为当前的j。
修复后的代码
#include<stdio.h> int main() { int M[2][2]= { {4,6}, {9,2}, }; int i,j,row; int arr[2][2]={0}; int t; for(i=0;i<2;++i) { for(j=0;j<2;++j) { t=M[i][j]; // 只遍历当前列的所有行,不需要列循环 for(row=0;row<2;++row) { if(row == i) continue; // 跳过自身,只和同列其他行比较 if(t >= M[row][j]) arr[i][j] += 1; } } } printf("The Matrix:\n"); for(i=0;i<2;++i){ for(j=0;j<2;++j) printf("%d ",arr[i][j]); printf("\n"); } return 0; }
修复说明
- 移除了多余的
col循环,固定使用当前列索引j,确保只和同列元素对比。 - 简化跳过自身的判断:只需要判断
row == i,因为列已经是当前的j,不会出现其他列的情况。 - 测试后输出结果为:
The Matrix: 0 1 1 0
完全符合预期。
内容的提问来源于stack exchange,提问作者Usual_Learner
相关产品推荐
相关产品推荐

