題目描述
輸入描述:
第一行:兩個整數n(2<=n<=10)、k(1<=k<=5),兩個數字之間用一個空格隔開,含義如上所示。 接下來有n行,每行n個正整數,其中,第i行第j個整數表示矩陣中第i行第j列的矩陣元素Pij且(0<=Pij<=10)。另外,數據保證最後結果不會超過10^8。
輸出描述:
對於每組測試數據,輸出其結果。格式爲: n行n列個整數,每行數之間用空格隔開,注意,每行最後一個數後面不應該有多餘的空格。
輸入
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;
}