我有一个数组,其中我需要找到具有最小权幂总和的行数。考虑的示例阵列:找到权力总和最小的行数,C
1 1 1
2 2 2
3 3 3
第一行,(索引= 0),功率的总和等于3(1^2 + 1^2 + 1^2 = 3)。
第二行(index = 1),幂的和等于12(2^2 + 2^2 + 2^2 = 12)。
第三行(索引= 2),幂的总和等于27(3^2 + 3^2 + 3^2 = 27)。
但我的程序显示错误的结果 - 而不是索引0
,它显示索引2
。问题是什么?
#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;
}
它并没有帮助,因为对于阵列'1 1 1 3 3 3 2 2 2'它显示索引'2':http://pastie.org/private/nyhnpig0m8l80laoefg – mirx
尝试上述方法..它会工作 – JerryGoyal