看板 C_and_CPP 關於我們 聯絡資訊
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int matA[3][3] = { {1,0,3}, {0,1,4}, {5,0,1} }; int matB[3][3] = { {1,0,0}, {0,1,0}, {0,0,1} }; for(int i=1; i<=3 ;i++){ //執行for迴圈用於控制i列 for(int j=1; j<=3 ;j++){ //執行for迴圈用於控制j行 matA[i][j]=matA[i][j]*matB[j][i]; //矩陣相乘 cout<<matA[i][j]; //印出值 } cout<<endl; } system("PAUSE"); return EXIT_SUCCESS; } -- 題目是要求用兩個矩陣A.B 做出A=A*B (把A的矩陣替換成A*B) 我寫的程式... 跑出來都是錯的... 有請版大指點@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.221.28
VictorTom:matA[0][0]還要用在後面幾輪的計算時就已經被你第一輪的 11/10 23:17
VictorTom:計算改掉了, 這樣寫鐵定是錯的啊. 話說, 就只能有AB兩個 11/10 23:17
VictorTom:二維陣列嗎??這樣要做A=A*B有點麻煩說, 不然就開九個一 11/10 23:18
VictorTom:般變數存每一輪的結果, 再統一寫回matA[][]去吧....XD 11/10 23:18
moon2519:我有想過~~你說的建議!!可是這樣就等同於開三個矩陣...@@ 11/10 23:22
holymars:五樓的你說說 這個問題有沒有可能不用額外記憶體就辦到 11/10 23:22
moon2519:...痾...我也很想知道= =__這是老師出的題目...悶ˊˋ 11/10 23:26
VictorTom:矩陣一定是這兩個嗎?? 是的話B是I啊, 直接回傳A就好XDDD 11/10 23:28
VictorTom:對了, 我注意到一個問題, 你兩個array都用爆了.... 11/10 23:28
VictorTom:mat[3][3], 只有[0~2][0~2]可以用....~_~ 11/10 23:29
moon2519:不是I...I是因為我方便檢查是否錯誤.... 11/10 23:32
VictorTom:用 , operator一次把九個全寫出來行不行....XDDD 11/10 23:35
rnc:matA[i][j]=matA[i][j]*matB[j][i];<==最後為什麼是[j][i] 11/11 00:54
softwind:這題不用做吧 A=A*B iff. B==I 得證 11/11 01:10
supyou5566:他是要將AXB結果存在A吧 11/11 01:22
VictorTom:回rnc: 矩陣的乘法本來就這樣啊, 雖然說我搞不太清楚這 11/11 01:51
VictorTom:樣寫column major / row major的部份有沒有寫對....Orz 11/11 01:51
VictorTom:等等~~好像真的不對, 只用雙層迴圈這樣寫不是矩陣乘法, 11/11 01:52
VictorTom:A[0][0]=A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]* 11/11 01:53
VictorTom:B[2][0] 才對吧; 當然, major與暫存空間的問題請另外克 11/11 01:54
VictorTom:服....Orz 11/11 01:54
mantour:他的意思應該是題目不準另外開矩陣暫存的話有沒有辦法做 11/11 09:46
mantour:吧 有點類似 swap(a,b) 不能用tmp暫存這樣 11/11 09:47
pizza0117:for i = 0~2 11/11 10:29
pizza0117: for j = 0~2 11/11 10:29
pizza0117: for k = 0~2 11/11 10:30
pizza0117: A[i][k] * B[k][j] 應該是這樣乘吧 11/11 10:30
pizza0117:不過要存到哪.... 11/11 10:31
pizza0117:想到了XOR 晚點寫看看 11/11 10:32
pizza0117:寫不出來ˊˋ.. 11/11 13:04