c语言矩阵乘法未知数组长度,我快哭了,矩阵乘法的程序总是时间超限,帮忙看看啊,坐等、、...

已结贴√

问题点数:20 回复次数:5

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

我快哭了,矩阵乘法的程序总是时间超限,帮忙看看啊,坐等、、

题目描述

求两个矩阵A、B的乘积C=AB。根据矩阵乘法的定义,只有A的列数和B的行数相同才能相乘。可以确保所有运算结果都在int类型的范围之内。

输入

输入数据为多个矩阵(最少2个),每个矩阵以两个正整数m和n开始,满足0

输出

对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个相乘……按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。

若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),则输出“Not satisfied the definition of matrix multiplication!”。然后用第k+1个矩阵去和第k+2个矩阵相乘。最后一个矩阵只做乘数。

每两组输出之间用一个空行分隔开。

样例输入

2 3

1 1 1

1 1 1

3 3

1 2 3

4 5 6

7 8 9

3 1

0

0

0

0 0

样例输出

12 15 18

12 15 18

0

0

提示

矩阵的乘法就是一行乘以一列加起来做一个元素。

我的代码:

#include

int main ()

{

int a[110][110] = {0};

int b[110][110] = {0};

int i,j,z,t,m,n,m1,n1;

loop:

scanf("%d %d",&m1,&n1);  //这是接受第一组数据

for (i = 1; i <= m1; ++i)

{

for (j = 1; j <= n1; ++j)

{

scanf("%d",&a[i][j]);

}

}

while (1)

{

int sum[110][110] = {0};

scanf("%d %d",&m,&n);

if (m == 0 && n == 0)

break;

else if (m != n1)

{

printf("Not satisfied the definition of matrix multiplication!\n\n");

goto loop;

}

else  //接受第二组数据

{

for (i = 1; i <= m; ++i)

{

for (j = 1; j <= n; ++j)

{

scanf("%d",&b[i][j]);

}

}

for (i = 1; i <= m1; i++)

{

for (j = 1; j < n; j++)

{

for (t = 1; t <= n1; t++) //计算每个元素的循环

{

sum[i][j] += a[i][t] * b[t][j];

}

printf("%d ",sum[i][j]);  //输出矩阵

}

for (t = 1; t <= n1; t++)

{

sum[i][n] += a[i][t] * b[t][n];

}

printf("%d\n",sum[i][n]);

}

printf("\n");

for (i = 1; i <= m1; ++i)   //把乘积矩阵赋值给第一个矩阵,继续接受第二个矩阵并计算

{

for (j = 1; j <= n; ++j)

a[i][j] = sum[i][j];

}

n1 = n;

}

}

return 0;

}

大侠们。运行时间怎么才能更短啊、、、我的程序总是时间超限、、、、

搜索更多相关主题的帖子:

正整数 元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值