對角線問題

2021-09-25 06:41:24 字數 1184 閱讀 8798

這裡有 n * n 矩陣,要求左上到右下的對角線上都為 x,其他地方為 y。x、y 任意值,但不相等。

x y y ... y

y x y ... y

y y x ... y..

.... ...

.... .

y y y ... x

我們可以把這裡的矩陣看做乙個二維陣列,長度為 n;x,y 賦任意不等常數即可。

>>> 方法一

現在,最簡單的法子是兩層迴圈遍歷陣列,在內層迴圈中做條件判斷,決定應該賦值 x,還是賦值 y。**如下邊這樣:

void

func_handle_problem_1()

}}

這樣做思維上很簡單,但存在效能上的缺點。由於每次賦值前都要做一次條件判斷,程式會做 n*n 次條件判斷。這顯得有些冗餘。

>>> 方法二

事實上,我們知道這個 n*n 的矩陣是正方形矩陣。也就是說,左上到右下這條對角線上,一定存在i == j。所以根本不需要條件判斷,直接做乙個i < n的迴圈體,對 m[i][i] 賦值 x 即可。由於其他位置得填充 y 值,所以對角線賦值前,我們可以對整個二維陣列做一次賦初值行為。

void

func_handle_problem_2()

}// 只對對角線賦值

for(

int i=

0; i

++i)

m[i]

[i]= x;

}

>>> 方法三方法二相比方法一,其優勢在於減少了條件判斷;但劣勢在於,對角線上重複賦值。因而,更優的處理是既不要條件判斷,也不要重複賦值。

現將矩陣分三部分:對角線左邊為第一部分,對角線為第二部分,對角線右邊為第三部分。只要在行遍歷的時候,對三部分分別賦值,就達到了沒有冗餘的條件判斷,也不會重複賦值。

**如下:

void

func_handle_problem_3()

}

對角線遍歷

給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。1 索引和為偶數 元素在第一行,往右走 元素在最後一列,往下走 其他情況,往右上走 2 索引和為奇數 元素在第一列,往下走 元素在最後一行,往右走 其他情況,往左下走 clas...

對角線的延伸

今天有點空閒時間,把劉未鵬的 康托爾 哥德爾 圖靈 永恆的金色對角線 又看了一遍。雖然之前看過很多遍了,也在斷斷續續地看 geb 但是每次看這篇文章,都還會引起一些思考。開始先介紹了圖靈停機問題和y combinator,這兩段都總結的很好,深入淺出,比我在別的地方看到的要清楚很多。後面介紹了哥德爾...

矩陣對角線輸出

題1 二維陣列 n n 沿對角線方向,從右上角列印到左下角如n 4 4 4陣列 寫道 要求列印出 寫道 4 3 8 2 7 12 1 6 11 16 5 10 15 9 14 1303 02 13 01 12 23 00 11 22 33 10 21 32 20 31 30程式 public cla...