看板 NTUBIME103HW 關於我們 聯絡資訊
我看了題目大部分都蠻簡單的 比較難的應該是矩陣相乘 水仙花 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