zoukankan      html  css  js  c++  java
  • 编程训练_矩阵乘法

    问题描述:

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

      

    本人计算机小白一枚,对编程有浓厚兴趣,在此贴出自己的计算机学习历程,还有很多不足,望多多指教! 读书后发现好多的内容与具体专业有偏差,没来得及完成,虽然“有时间我就会做...”是人生最大的谎言,但有时间我会继续搞定未完成的内容,有始有终,兴趣使然!
  • 相关阅读:
    git创建一个空的版本库
    程序后台服务启动,MongoDB未启动(启动较慢)/(关机重启情况下)。
    启动客户端后台服务
    客户端后台服务(已注册机器)RabbitMQ未消费的情况
    MongoDB数据重复解决方案
    github中新建一个branch(分支)
    MES-后台服务卸载
    linux 第八章 高级键盘
    socketserver
    jmeter发送邮件的模板
  • 原文地址:https://www.cnblogs.com/Robin5/p/11171691.html
Copyright © 2011-2022 走看看