二维数组取出来一对矩阵向量相乘

二维数组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;
}

img

解答如下

#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;
}