HZNUOJ 2003 矩阵乘法

本文详细介绍了HZNUOJ2003矩阵乘法题目的解题思路,包括多层for循环的应用、二维数组读写技巧及矩阵乘法原理。通过具体代码实现,展示了如何构建和输出结果矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HZNUOJ 2003 矩阵乘法

题目描述

在这里插入图片描述

解题思路和注意点

本题是个简单的练习多层for循环以及二维数组读写的题目,难度不大,只需要运用线性代数中简单的矩阵乘法原理构建出结果的二维数组即可,需要注意的主要是输出的格式,以及C矩阵的大小是n*k,步骤如下:

  1. 读取题目所给的两个矩阵A和B ,用两个两层for循环实现即可;
  2. 定义出结果矩阵C,并初始化其中的值为0,以便后续的计算;
  3. 运用3层循环实现对矩阵C中各个位置的求值;
  4. 输出求得的矩阵C,输出注意换行和空格

矩阵乘法的代码实现原理

在矩阵C中,C [ i ] [ j ] 的值取决于A矩阵的行和B矩阵的列,且下标从0开始有:

  • C[i][j] = A[i][0]+B[0][j] + A[i][1]+B[1][j] +……+ A[i][k-1]+B[k-1][j]

用for循环来实现这个求和过程,即

for(int z=0;z<m;z++) 
{
	c[i][j]+=a[i][z]*b[z][j]; 
}

其中m是A的行数和B的列数,z变动时即对应的A[i][z]和B[z][j]相加

AC代码

#include<stdio.h>
#include<math.h>
#include<string.h>

int main(void)
{
	int n,m,k;
	int a[22][22],b[22][22],c[22][22];//a是第一个矩阵,b是第二个,c是相乘后的结果 
	//读入两个矩阵a和b 
	scanf("%d%d%d",&n,&m,&k);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			scanf("%d",&a[i][j]);
		}
	} 
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<k;j++)
		{
			scanf("%d",&b[i][j]);
		}
	}
	//将c初始化
	//其中c是nxk的矩阵,即c中i的范围是0-n,j的范围是0-k
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<k;j++)
		{
			c[i][j]=0;
		}
	}
	//根据线代矩阵乘法的原理(行乘列)
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<k;j++)//外两层循环构建c
		{
			for(int z=0;z<m;z++)//第三层用来行乘列 
			{
				c[i][j]+=a[i][z]*b[z][j]; 
			}
		} 
	}
	//输出
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<k;j++)
		{
			printf("%d ",c[i][j]);
			if(j==k-1) printf("\n");//判断换行 
		}
	} 
	return 0; 
}

此题不难,再接再厉!

### HZNUOJ竞赛题目在线评测系统的功能介绍 HZNUOJ作为杭州师范大学的在线评测系统,提供了丰富的编程练习和比赛环境。该平台支持多种编程语言,并允许用户提交代码以获得即时反馈。通过集成开源的判题系统如NJUPT Online Judge或自定义实现,实现了对代码的自动化测试和评分[^1]。 对于HZNUOJ上的竞赛题目,在线评测系统通常具备如下特点: - **多样的编程语言支持**:无论是C/C++还是Python等主流编程语言均被支持。 - **详细的题目分类**:按照难度级别、知识点领域等方式进行了细致划分,便于学习者有针对性地提高技能。 - **完善的评判机制**:不仅限于简单的正确与否判定,还包括运行时间限制、内存占用情况等多个维度来评估解法的质量[^2]。 为了访问HZNUOJ的具体题目列表,建议直接登录官方网站并导航至对应页面查看最新发布的挑战项目或是历史存档内的经典习题集。 ```python import requests from bs4 import BeautifulSoup url = "http://acm.hznu.edu.cn/problemset.php" response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') problem_list = [] # 假设问题表格位于一个特定ID为problemTable的HTML标签内 table = soup.find('table', {'id': 'problemTable'}) rows = table.findAll('tr')[1:] # 跳过表头 for row in rows: cols = row.findAll('td') title = cols[1].text.strip() link = "http://acm.hznu.edu.cn/" + cols[1].find('a')['href'] difficulty = cols[-1].text.strip() # 获取最后一列的内容作为难度等级 problem_info = { "title": title, "link": link, "difficulty": difficulty } problem_list.append(problem_info) else: print("无法获取网页内容") for item in problem_list[:5]: print(f"{item['title']} ({item['difficulty']}) - {item['link']}") ``` 此段脚本展示了如何利用`requests`库抓取HZNUOJ网站上部分公开可见的问题列表信息(仅作示例用途),实际操作时应遵循目标站点的服务条款与robots协议规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值