我需要在每个对角线条(垂直于主对角线)中找到平方矩阵的最小值。我正在使用的代码实际上会输出每个条带,但由于某种原因,它找不到m in元素。

#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

最佳答案

我认为你把它变得比需要的更复杂,我发现很难理解你的算法是什么。
我建议您只计算打印时循环中的最小值。
类似于:

#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;

    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 (j == z)
            {
              // First time for this strip
              // So just initialize min to current element
              min[d] = x[j][d - j];
            }
            else if (min[d] > x[j][d - j])
            {
              // Current element is less than min
              // So overwrite min with current element
              min[d] = x[j][d - j];
            }
            if(d == 0 || d == 2 * n - 2){
                break;
            }
        }
        printf("\n");
    }
    printf("\n");
    for (i = 0; i < 2 * n - 1; i++)
        printf("min = %d\n", min[i]);

    return 0;
}

关于c - 方矩阵对角线带中的最小元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50363490/

10-13 07:10