我從堆疊溢位中看到了這段代碼
int[,] matrix = new int[5, 10];
int row = matrix.GetLength(0);
int col = matrix.GetLength(1);
for (int i = 0; i < row * col; i )
{
matrix[i / col , i % col] = i 1;
}
有人說它會產生嵌套回圈。我試圖破解這個密碼,但我做不到。有人請解釋這段代碼是如何作業的。
uj5u.com熱心網友回復:
如果您有兩個嵌套for回圈,一個從 0 到row一個從 0 到col,這兩個回圈將一起執行row * col時間。因此,您可以用從 0 到 運行的單個回圈替換嵌套回圈,row * col這正是這里所做的。
然后,您唯一需要做的就是從單個回圈索引中找到嵌套回圈的單獨回圈索引(我們稱它們為jand k)i。
這樣做的方法是考慮一個row * col用數字 0... 填充的表格row * col。我們如何找到給定條目的行和列索引(j和,分別) ?好吧,您發布的代碼告訴我們:ki
int j = i / col // row index
int k = i % col // col index
uj5u.com熱心網友回復:
從技術上講,這段代碼本身沒有嵌套回圈。但是,它從0到計數5 * 10 - 1,并且在每次迭代中計算行和列索引。以下內容可能更容易理解:
for (int i = 0; i < row * col; i )
{
int rowIndex = i / col; // divide by column count = row index
int colIndex = i % col; // modulo by column count = column index
Console.WriteLine($"i: {i} => row: {rowIndex}, col: {colIndex}");
matrix[rowIndex, colIndex] = i 1;
}
寫下實際數字,您會親眼看到,對于您的迭代0,9您將獲得rowIndex == 0并colIndex具有 的值0,9然后對于您的迭代10,您將19獲得rowIndex == 1并colIndex具有值等。09
嵌套回圈變體自然會如下所示:
for (int rowIndex = 0; rowIndex < row; rowIndex )
{
for (int colIndex = 0; colIndex < col; colIndex )
{
int i = rowIndex * col colIndex; // back-calculate 'i'
Console.WriteLine($"i: {i} => row: {rowIndex}, col: {colIndex}");
matrix[rowIndex, colIndex] = i 1;
}
單回圈版本的嵌套外觀展開并替換為數學運算(除法,模數)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410512.html
標籤:
上一篇:如何移動不同子目錄中的檔案?
