二维数组A[10][10]每行的最大元素构成向量b,每列的最小元素构成向量C 求B·C
#include <stdio.h>
int main()
{
int s=0;
int A[10][10],B[10],C[10];
printf("请输入10*10的矩阵:\n");
for(int i=0;i<10;i++) //输入二维数组
for(int j=0;j<10;j++)
scanf_s("%d", &A[i][j]);
//每行最大
int max = A[0][0];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
if (A[i][j] > max)
max = A[i][j];
B[i] = max;
}
//输出B
printf("B为:\n");
for (int i = 0; i < 10; i++)
printf("\t%d\t", B[i]);
printf("\n");
//每列最小
int min = A[0][0];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
if (A[j][i] > min)
min = A[j][i];
C[i] = min;
}
//输出C
printf("C为:\n");
for (int i = 0; i < 10; i++)
printf("\t%d\n", C[i]);
printf("\n");
//B.C
for (int i = 0; i < 10; i++)
s += B[i] * C[i];
printf("B.C=%d", s);
return 0;
}
解答如下
#include<stdio.h>
int main()
{
int n=10;
int t[n][n];
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
scanf("%d",&t[i][j]);
}
}
// int max=t[0][0],posi=0,posj=0;
int maxarr[n],pmax=0;
for(int i=0; i<n; i++)
{
int max=t[i][0],posi=0,posj=0;
for(int j=0; j<n; j++)
{
if(t[i][j]>max)
{
max=t[i][j];
posi=i;
posj=j;
}
}
maxarr[pmax++]=max;
}
int minarr[n],pmin=0;
for(int i=0; i<n; i++)
{
int min=t[0][i],posi=0,posj=0;
for(int j=0; j<n; j++)
{
if(t[j][i]<min)
{
min=t[j][i];
posj=j;
posi=i;
}
}
minarr[pmin++]=min;
}
for(int i=0; i<n; i++)
{
printf("%d ",maxarr[i]*minarr[i]);
}
return 0;
}