【发布时间】:2018-05-16 06:06:03
【问题描述】:
我需要找到方阵的每个对角线带(垂直于主对角线)中的最小值。我正在使用的代码实际上会输出每个条带,但由于某种原因它没有找到 min 元素。
#include<stdio.h>
int main(){
int min[10], x[3][3] = { 1, 2, 3,
4, 5, 6,
7, 8, 9};
int n = 3, d, j, z, i, k;
for (d = 0, i = 0; d < 2 * n - 1; d++, i++){
printf("D %d: ", d);
z = (d < n) ? 0 : d - n + 1;
for (j = z; j <= d - z; j++){
printf("%d ", x[j][d - j]);
if(d == 0 || d == 2 * n - 2){
min[i] = x[j][d - j];
break;
}
min[i] = x[j][d - j];
for (k = j + 1; k <= d - z; k++){
if (min[i] > x[k][d - k])
min[i] = x[k][d - k];
}
}
printf("\n");
}
printf("\n");
for (i = 0; i < 2 * n - 1; i++)
printf("min = %d\n", min[i]);
return 0;
}
输出:
D 0: 1
D 1: 2 4
D 2: 3 5 7
D 3: 6 8
D 4: 9
min = 1
min = 4
min = 7
min = 8
min = 9
但在这种情况下应该是
min = 1
min = 2
min = 3
min = 6
min = 9
【问题讨论】:
-
这可能是learn how to debug your programs 的好时机。例如,使用调试器,您可以在监视变量及其值的同时逐行执行代码。这样可以很容易地查看是否有任何计算或表达式不正确。
-
想提供一个说明性的例子吗?
-
如果有帮助,我会更新输出。
-
AFAICS,
d == i始终在主循环中(不是打印循环),因此您不需要主循环中的两个变量。但是,这与问题无关。