我有一个数组,在这个数组中我需要找到行数,它的幂和最小。以示例数组为例:

1 1 1
2 2 2
3 3 3

第一行(索引=0),幂和等于3(1^2+1^2+1^2=3)。
第二行(索引=1),幂和等于12(2^2+2^2+2^2=12)。
第三行(索引=2),幂和等于27(3^2+3^2+3^2=27)。
但是我的程序显示了错误的结果-它显示的不是index0,而是index2。怎么了?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int ** alloc(int n, int m)
{
    int **array, i;

    array = malloc(sizeof(int*) * n);

    for(i=0; i<n; i++)
        array[i] = malloc(sizeof(int) * m);

    return array;
}

void show(int **array, int n, int m)
{
    int i,j;

    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            printf("%d\t", array[i][j]);
        }
        printf("\n");
    }
}

void fill(int **array, int n, int m, int x)
{
    int i,j;

    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            array[i][j] = x;
        }
    }
}

void dealloc(int **array, int n, int m)
{
    int i;
    for(i=0; i<n; i++)
        free(array[i]);
    free(array);
}

int smallest_powers_sum(int **array, int n, int m)
{
    int sum = 0, minsum = 0, i, j, minindex = -1;

    for(i=0; i<n; i++)
    {
        minsum = sum;
        sum = 0;

        for(j=0; j<m; j++)
        {
            sum += pow(array[i][j], 2);
        }

        if(minsum <= sum)
            minindex = i;

        printf("sum = %d, minsum = %d, minindex = %d\n", sum, minsum, minindex);
    }

    return minindex;
}

int main(int argc, char **argv)
{
    int **array, n1 = 3, m1 = 3;

    array = alloc(n1, m1);
    fill(array, n1, m1, 1);

    array[0][0] = 1;
    array[0][1] = 1;
    array[0][2] = 1;

    array[1][0] = 2;
    array[1][1] = 2;
    array[1][2] = 2;

    array[2][0] = 3;
    array[2][1] = 3;
    array[2][2] = 3;


    int sum = smallest_powers_sum(array, n1, m1);
    printf("index = %d\n", sum);

    dealloc(array, n1, m1);

    return 0;
}

最佳答案

我想你是说:

     if(sum <= minsum ){
         minindex = i;
         minsum = sum;
     }

此外,最初将integer_max赋给minsum
代码如下:
int smallest_powers_sum(int **array, int n, int m)
{
    int sum = 0, minsum = 1000000, i, j, minindex = -1;

    for(i=0; i<n; i++)
    {

        sum = 0;

        for(j=0; j<m; j++)
        {
            sum += pow(array[i][j], 2);
        }

        if(sum <= minsum ){
         minindex = i;
         minsum = sum;
     }

        printf("sum = %d, minsum = %d, minindex = %d\n", sum, minsum, minindex);
    }

    return minindex;
}

08-19 19:01