作者steve1012 (steve)
看板NTUBIME103HW
標題[C++ ] 上機考 矩陣相乘
時間Sat Dec 11 23:02:32 2010
我看了題目大部分都蠻簡單的
比較難的應該是矩陣相乘 水仙花 sort吧
最後一個矩陣相乘有兩種方法
一種是你就宣告11*11的矩陣
我就不多說了
我想說的是動態宣告的二維陣列
首先動態宣告的語法如下:
若我想要宣告一個M*L的陣列
則我這樣做
int **arr1=new int[M];
for(int i=0;i<M;i++)
arr1[i]=new int [L];
然後再來是矩陣相乘的方法
設第一個矩陣是 M*L
二 L*N
三 M*N
(第三個矩陣拿來儲存前兩個矩陣相乘的結果)
以下是語法
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
for(int k=0;k<L;k++)
arr3[i][j]+=arr1[i][k]*arr2[k][j];
-------以下是部分程式碼---------------------------
void multiply(int**,int**,int**,int,int,int)
void main()
{
//先宣告矩陣的寬度 前面有講過第一個矩陣是M*L
//第二個 L*N 第三個 M*N
int M;
int N;
int L;
cin>>M>>N>>L;
//////////////////////////////
//以下動態宣告二維陣列//
int **arr1=new int *[M];
for(int i=0;i<M;i++)
arr1[i]=new int[L];
int **arr2=new int *[L];
for(int i=0;i<L;i++)
arr2[i]=new int[N];
int **arr3=new int *[M];
for(int i=0;i<M;i++)
arr3[i]=new int [N];
for(int i=0;i<M;i++)
////記得第三個陣列一定要歸零 第三個陣列是存東西用的 要是沒歸零
//就要賭運氣會部會出錯了 有些compiler部會給初始直
for(int j=0;j<N;j++)
arr3[i][j]=0;
for(int i=0;i<M;i++)
for(int j=0;j<L;j++)
{
cout<<"請輸入第一個陣列的第"<<i+1<<" "<<j+1<<"個元素"<<endl;
cin>>arr1[i][j];
}
for(int i=0;i<L;i++)
for(int j=0;j<N;j++)
{
cout<<"請輸入第二個陣列的第"<<i+1<<" "<<j+1<<"個元素"<<endl;
cin>>arr2[i][j];
}
multiply(arr1,arr2,arr3,M,L,N);
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
cout<<arr3[i][j]<<" ";
cout<<endl;
}
return 0;
}
以上矩陣相乘
有問題可以找我debug
要是我心情不錯的話
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.202.142
→ steve1012:對了用完要記得delete才是乖寶寶喔 12/11 23:08
推 wowsampo: 維峻神快拜!!!!! 看來要好好熟悉pointer了QQ 12/11 23:13