• 编程训练_矩阵乘法


    问题描述:

    Description
    
    给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
    
      例如:
    
      A =
    
      1 2
    
      3 4
    
      A的2次幂
    
      7 10
    
      15 22
    Input
     第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
    
    接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
    
    Output
    输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开

    关键思路: 

         C[i][j] += B[i][k] * A[k][j];  // 矩阵乘积的关键
    	while (M>1)
    	{
    		// 计算第一次
    		for (i=1; i<=N; i++)
    		{
    			for (j=1; j<=N; j++)
    			{
    				for (k=1; k<=N; k++)
    				{
    					C[i][j] += B[i][k] * A[k][j];
    				}
    			}
    		}
    		
    		// B 保存C中元素,C置零 
    		for (i=1; i<=N; i++)
    		{
    			for (j=1; j<=N; j++)
    			{
    				B[i][j] = C[i][j];
    				C[i][j] = 0;
    			}
    		}
    		M--;
    	 } 

    实现代码:

    # include <stdio.h>
    # define Max 32
    
    int main(void)
    {
    	int N; // 记录矩阵的维度
    	int M; // 乘积次数 
    	int i, j, k;
    	int A[Max][Max] = {0};
    	int B[Max][Max] = {0};
    	int C[Max][Max] = {0};
    	scanf("%d",&N); 
    	scanf("%d",&M); 
    	if (N<1 || N>30 || M<0 || M>5)
    		return 0;
    	
    	// 输入矩阵的元素 
    	for (i=1; i<=N; i++)
    	{
    		for (j=1; j<=N; j++)
    		{
    			scanf("%d",&A[i][j]);
    			if (A[i][j]<0 || A[i][j]>10)
    				return 0;
    			B[i][j] = A[i][j];
    			C[i][j] = 0;
    		}
    	}
    	
    	// 矩阵的乘积运算 
    	while (M>1)
    	{
    		// 计算第一次
    		for (i=1; i<=N; i++)
    		{
    			for (j=1; j<=N; j++)
    			{
    				for (k=1; k<=N; k++)
    				{
    					C[i][j] += B[i][k] * A[k][j];
    				}
    			}
    		}
    		
    		// B 保存C中元素,C置零 
    		for (i=1; i<=N; i++)
    		{
    			for (j=1; j<=N; j++)
    			{
    				B[i][j] = C[i][j];
    				C[i][j] = 0;
    			}
    		}
    		M--;
    	 } 
    	
    	
    	// 输出矩阵 
    	for (i=1; i<=N; i++)
    	{
    		for (j=1; j<=N; j++)
    		{
    			printf("%d",B[i][j]);
    			if(j != N)
    				printf(" "); 
    		}
    		if (i != N)
    			printf("
    "); 
    	}
    	
    	return 0;
     } 
    

      

    本人计算机小白一枚,对编程有浓厚兴趣,在此贴出自己的计算机学习历程,还有很多不足,望多多指教! 读书后发现好多的内容与具体专业有偏差,没来得及完成,虽然“有时间我就会做...”是人生最大的谎言,但有时间我会继续搞定未完成的内容,有始有终,兴趣使然!
  • 相关阅读:
    修改input标签输入样式
    CSS3的transform 转换
    前端小知识--区分get和post请求
    JS面向对象--你真的理解闭包了吗?
    px,em,rem的区别
    傻瓜式教程--实现登录页面的验证码以及验证(VUE)
    基于RBAC权限管理的后台管理系统
    在VUE中实现打印
    关于三层架构的好文章
    RabbitMQ常用命令、管理界面
  • 原文地址:https://www.cnblogs.com/Robin5/p/11171691.html
Copyright © 2020-2023  润新知