我必须输入三个正整数n,m和p。然后输入两个矩阵。第一个是n(行)乘m(列)矩阵。第二个是m(行)乘p(列)矩阵然后输出矩阵乘积(应该是n行x列)并使用堆存储器来存储矩阵。这是我到目前为止所拥有的,
long double adjProduct(int n, int m, int ** matrix)
{
int j, k, l;
long double product = 0.0;
long double temp = 0.0;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if((i + (1*(m - 1))) < n)
{
temp = 1;
for(k = 0; k < m; k++)
temp *= matrix[i + k][j];
if(temp > product)
product = temp;
}
if(j + (1*(m-1)) < n)
{
temp = 1;
for(k = 0; k < m; k++)
temp *= matrix[i][j + k];
if(temp > product)
product = temp;
}
if((i + (1*(m-1)) < n) && (j + (1*(m-1)) < n))
{
temp = 1;
for(k = 0; k < m; k++)
temp *= matrix[i + k][j + k];
if(temp > product)
product = temp;
}
if((i + (1*(m-1)) < n) && (j - (1*(m-1)) >= 0))
{
temp = 1;
for(k = 0; k < m; k++)
temp *= matrix[i + k][j - k];
if(temp > product)
product = temp;
}
}
}
return product;
}
main(){
int ** matrix;
int n = 0;
int m = 0;
int i, j;
scanf("%d %d", &n, &m);
matrix = (int **)malloc(sizeof(int *)*n);
if(matrix == NULL)
exit(0);
for(i = 0; i < n; i++)
{
matrix[i] = (int*)malloc(sizeof(int)*n);
if(matrix[i] == NULL)
exit(0);
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
scanf("%d", &matrix[i][j]);
}
printf("%.0Lf", adjProduct(n, m, matrix));
for(i = 0; i < n; i++)
free(matrix[i]);
free(matrix);
matrix = NULL;
}
感谢所有帮助!
答案 0 :(得分:1)
你在哪里成倍增加?乘法应该是这样的:
for(i=0;i<m;i++)
{
for(j=0;j<p;j++)
{
product[i][j]=0;
for(k=0;k<m;k++)
{
product[i][j]+=matrix1[i][k]*matrix2[k][j];
}
}
}