Re: [問題] for迴圈 處理矩陣問題
※ 引述《tyc5116 (累人啊....)》之銘言:
: ※ 引述《powerjeffson (功夫熊)》之銘言:
: : 遇到的問題: (題意請描述清楚)
: : 假設我有一個A矩陣,大小為9*9
: : / \ / \
: : | 1 2 3 4 5 6 7 8 9 | | 5 5 5 8 8 8 2 2 2 |
: : | 2 3 4 5 6 7 8 9 1 | | 5 5 5 8 8 8 2 2 2 |
: : | 3 4 5 6 7 8 9 1 2 | | 5 5 5 8 8 8 2 2 2 |
: : | 4 5 6 7 8 9 1 2 3 | | 8 8 8 2 2 2 5 5 5 |
: : A = | 5 6 7 8 9 1 2 3 4 | B = | 8 8 8 2 2 2 5 5 5 |
: : | 6 7 8 9 1 2 3 4 5 | | 8 8 8 2 2 2 5 5 5 |
: : | 7 8 9 1 2 3 4 5 6 | | 2 2 2 5 5 5 8 8 8 |
: : | 8 9 1 2 3 4 5 6 7 | | 2 2 2 5 5 5 8 8 8 |
: : | 9 1 2 3 4 5 6 7 8 | | 2 2 2 5 5 5 8 8 8 |
: : \ / \ /
: 將要取的元素存放在一個空間abc(1*9 array)
: for (int i=0;i<9;++i){
: int index=0;
: if (i%3==0)
: index+=i;
: for (int j=0;j<9;++j){
: if (j%3==0)
: ++index;
: B[i][j]=abc[index];
: }
: }
: 我是直接寫的啦,沒有真的程式去跑過,所以錯了就算了...XD
: 如果是我的話,應該就是像這樣,迴圈加上判斷來寫吧...
: 我覺得這是最直覺的方式
看到各位在這篇推文中貢獻自己的想法, 雖然應該解決了原po的問題,
尤其是 "B[i][j] = A[i/3*3+2][j/3*3+2];" 的推文, 一行就解決了,
不過還是覺得有改進方式, 雖然在腦中已經大概有想法, 但是最近雜務頗多,
今天終於花了大概15分鐘把想法實作出來了, 以下提供給原po"另一種"參考!
(僅提供副程式部份)
void MatrixTest(int M[9][9], int T[9][9])
{
int i, j, x, y, s;
for (i = 0; i < 9; i += 3)
{
x = i + 2;
for (j = 0; j < 9; j += 3)
{
y = j + 2;
s = M[x][y];
T[i][j] = T[i][j + 1] = T[i][j + 2] = s;
T[i + 1][j] = T[i + 1][j + 1] = T[i + 1][j + 2] = s;
T[i + 2][j] = T[i + 2][j + 1] = T[i + 2][j + 2] = s;
}
}
}
以上這種作法雖然沒有一行那麼漂亮, 但是我會這麼做是有原因的!
因為這種解法不會用到乘法與除法, 僅用到加法而已, 而且只要再稍微整理一下,
可以輕鬆改成給 N x N 矩陣用的函式, 另外,
如果有人注意到我上面三行 " .... = s;" 的排列方式,
應該會有人看出端倪, 沒錯, 這裡可以再最佳化, 可以使用memcpy來處理,
這樣對 N x N 矩陣, N值本身大於一定值時, 效率就會大幅顯現出來!
以上, 個人拙見, 僅供參考! 歡迎指教! :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.88.32
→
04/28 21:58, , 1F
04/28 21:58, 1F
→
04/28 21:59, , 2F
04/28 21:59, 2F
討論串 (同標題文章)