我有一个矩阵[[0 0 0 0 0 0 0] [1 0 0 1 0 0 1] [2 1 0 0 1 0 0]]。我需要返回最大的元素索引最后一行但小于2,它应该返回最高值的索引。
例如,在我的矩阵中,我需要程序返回M [2,4],2,4作为解决方案。我的程序正在运行,但它返回M [2,1]位置的值
M=[[0 0 0 0 0 0 0]
[1 0 0 1 0 0 1]
[2 1 0 0 1 0 0]]
ma=0
for i in range(1,2):
for j in range(0,7):
if M[i,j]<2 and ma<=M[i,j]:
ma=M[i,j]
return M[i,j],i,j
答案 0 :(得分:0)
问题是它太早回归。您应该在扫描完所有元素后返回。在这种情况下,不应将return语句放在内部循环内,将其放在外部for循环之外。另外我认为您需要跟踪最高值的索引以及char buffer[100];
while (fgets(buffer, sizeof buffer, stdin)) {
int n = 0;
sscanf(buffer, "%d%d%d %n", &a, &b, &c, &n);
if (n == 0) {
fprintf(stderr, "3 int were not entered\n");
break;
}
if (buffer[n] != 0) {
fprintf(stderr, "Extra input detected.\n");
break;
}
// do stuff here with a,b,c
}
,因为i,j将是循环结束后最后一个元素的值。
原始代码的语法似乎不正确,所以我做了一些修改:
ma
此代码输出所需的结果:def test():
M=[[0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 1, 0, 0, 1],
[2, 1, 0, 0, 1, 0, 0]]
ma=0
maxi = maxj = 0
for i in range(0,3):
for j in range(0,7):
if M[i][j] < 2 and ma <= M[i][j]:
ma = M[i][j]
maxi = i
maxj = j
return(ma, maxi, maxj)
print(test())