矩陣的冪

題目描述

給定一個n*n的矩陣,求該矩陣的k次冪,即P^k。

輸入描述:

 
第一行:兩個整數n(2<=n<=10)、k(1<=k<=5),兩個數字之間用一個空格隔開,含義如上所示。
接下來有n行,每行n個正整數,其中,第i行第j個整數表示矩陣中第i行第j列的矩陣元素Pij且(0<=Pij<=10)。另外,數據保證最後結果不會超過10^8。

輸出描述:

對於每組測試數據,輸出其結果。格式爲:
n行n列個整數,每行數之間用空格隔開,注意,每行最後一個數後面不應該有多餘的空格。
示例1

輸入

2 2
9 8
9 3

輸出

153 96
108 81

分析:

1.這裏要模擬矩陣的乘法,用了3層循環模擬乘法,最外一層模擬次冪;

2.這裏主要講一個 ,利用memcpy函數實現數組之間的複製。

void*memcpy(void*dest, const void*src,unsigned int count);

第一個參數是目的數組首地址,即需要賦值的地址。第二個參數是源數組地址,即被複制的數組,第三個參數是複製的字節數。

數組是連續存放的,所以只需要將src的大小字節數作爲第三個參數即可。

注意的是第三個參數是字節數大小而不是數組大小,如int a[5] 數組大小是5,但是字節數是5*4=20

通常第三個參數利用sizeof()來提供,即sizeof(src);

代碼:

#include <iostream>
#include <cstring>


using namespace std;


int main()
{
    int n,i,j,temp=0,k,t;
    cin>>n>>t;
    int p[n+1][n+1],q[n+1][n+1];
    int res[n+1][n+1];


    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            cin>>p[i][j];
            q[i][j]=p[i][j];
            res[i][j]=p[i][j];
        }


    while(t-1!=0)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                for(k=1;k<=n;k++)
                    {temp += q[i][k] * p[k][j];}
                res[i][j]=temp;
                temp=0;
            }
        }
        memcpy(q,res,sizeof(res));
        t--;
    }


    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(j!=1)
                cout<<" ";
            cout<<res[i][j];
        }
        cout<<endl;
    }


    return 0;
}

發佈了112 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章