A[n,m]是一个n行m列的举证,a[i,j]表示A的第i行第j列的元素,定义为x[i.j]为A的第i行和第j列除了a[i,j]之外的所有元素(共n+m-2个)的乘积,即x[i,j]=a[i,1]*a[i,2]*.....*a[i,j]*......*a[i,m]*a[2,j]*a[3,j]*a[4,1j]*.....*a[i+1,j];现输入非负整形的矩阵A[n,m],求MAX【x[i,j]】
输入描述:第一行两个整数n和m,之后n行输入矩阵,均为非负整数
输出描述,一行输出答案
实例
输入 3 5
5 1 8 5 2
1 3 10 3 3
7 8 5 5 16
输出 358400
#include <stdio.h>
int Sum(int (*arr)[5],int i,int j,int n,int m);
int MaxMutil(int (*arr)[5],int n,int m);
int main(void)
{
int n,m;
printf("请输入行:\n");
scanf("%d",&n);
getchar();
printf("请输入列:\n");
scanf("%d",&m);
int arr[5][5];
printf("请输入%d行%d列数据:\n",n,m);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&arr[i][j]);
}
}
int Max=MaxMutil(arr,n,m);
printf("最大值为%d",Max);
return 0;
}
int MaxMutil(int (*arr)[5],int n,int m)
{
int Max=0;
int row=n,line=m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int Num=Sum(arr,i,j,row,line);
if(Max<Num)
{
Max=Num;
}
}
}
return Max;
}
int Sum(int (*arr)[5],int i,int j,int n,int m)
{
int SUM=1,num;
for(int k=0;k<n;k++)
{
for(int l=0;l<m;l++)
{
if(k==i||l==j)
{
num=arr[k][l];
SUM=SUM*num;
}
}
}
return SUM/arr[i][j];
}