UVA 一星題筆記(2) 11349 Symmetric Matrix

Sharon Peng
2 min readSep 26, 2019

--

這題上次竟然解不出來,明明就不難,可惡!

這題簡單的原因是只要想出對稱矩陣的特性就可以了。

題目大致如下:

想要請你把判斷題目給的方陣,是不是對稱方陣

對稱方陣的特性就是,舉個例子比較好懂:

我們現在有3x3的矩陣

我們可以發現一個規律,在方陣內的相對位子相加,恰好是方陣大小再減一(因為陣列從1開始存),所以我們可以依照這個特性去判斷他是不是對稱方陣。(偶數的對稱方陣也符合此規律)

判斷的程式碼如下(只給部分筆記不好意思囉~)

// input the matrix
for(int i = 0; i < row; ++i)
{
for(int j = 0; j < col; ++j)
{
cin >> arr[i][j];
}
}
// 判斷是不是對稱方陣
for(int i = 0; i < row; ++i)
{
for(int j = 0; j < col; ++j)
{
int r = row - i - 1;
int c = col - j - 1;
if(arr[i][j] != arr[r][c])
{
flag = 0;
break;
} else if ( arr[i][j] < 0 ) //好像有一個測資是負的所以多加他
{
flag = 0;
break;
} else
flag = 1;

}
if(flag == 0)
break;
else
flag = 1;
}

在上面中使用許多個flag來判斷是不是對稱方陣,因為有雙層迴圈,所以跳出一層還不夠,還要多加一個break,所以下面再判斷一次。

*如果輸入不知道要怎麼處理N=xx時,可以參考cin.ignore()這個函式,會很有幫助的!

謝謝您耐心地觀看!

--

--

Sharon Peng
Sharon Peng

No responses yet