BASIC-17 VIP试题 矩阵乘法

在这里插入图片描述
这里好像对行尾空格的要求不是很严……

#include <iostream>
using namespace std;
int a[35][35];
int tmp[35][35];
int ans[35][35];

int main()
{
    int n,m;
    cin>>n>>m;
    
    for(int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++) 
		{
            cin>>a[i][j]; 
            ans[i][j] = a[i][j];
        }
    }
    
    if(m==0)	//0次幂,打印单位矩阵 
	{
        for (int i=1;i<=n;i++) 
		{
            for (int j=1;j<=n;j++) 
			{
                if(i!=j) 
					cout<<0<<" ";
                else if(i==j)
					cout<<1<<" ";
            }
            cout<<endl;
        }   
        return 0;
    }
	else if(m==1)	//1次幂,打印原矩阵 
	{
		for(int i=1;i<=n;i++) 
		{
            for(int j=1;j<=n;j++) 
			{
				cout<<ans[i][j]<<" ";
			}
            cout<<endl;
        }   
        return 0;
	} 
	else	//计算m次幂
	{
        while(--m)
		{
            for (int i = 1; i <= n; i++) 
			{
                for (int j = 1; j <= n; j++) 
				{
                    for (int k = 1; k <= n; k++) 
					{
                        tmp[i][j] += ans[i][k] * a[k][j];
                    }       
                }
            }
            
            for (int i = 1; i <= n; i++) 
			{
                for (int j = 1; j <= n; j++) 
				{
                    ans[i][j] = tmp[i][j];
                    tmp[i][j] = 0;            
                }
            }
        }
            
		for (int i = 1; i <= n; i++) 
		{
            for (int j = 1; j <= n; j++) 
			{
                cout<<ans[i][j]<<" ";                
            }
        	cout << endl;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/88654489