簡體   English   中英

二維數組中對角線的總和

[英]Sum of the diagonal in a 2 dimensional array

for (row=0; row<SIZE; row++)
    {
        for (col=0; col<SIZE; col++)
        {
            if (row == 0 && col == 0) {
                answer+=my_data[row][col];
            }
            else if ((row)/(col) == 1) //1 is slope of array
            {
                answer+=my_data[row][col];
            }
        }
    }
    printf("The diagonal sum of the 8x8 array is: %i\n",answer);

[0,0][8,8]結束

“將8x8數組內從[0,0]開始的對角線值相加”

我知道我可以做一個for循環,因為形狀僅為1:1,但是如果我需要對一個8x10對角線數組求和,該怎么辦呢?

對角線元素和主對角線僅針對方矩陣定義。

if rowcount == colcount
  sum = 0
  for i = 0 to rowcount
    sum += matrix[i][i]
  end-for
else
  print Diagonal sum not defined
end-if

對於非正方形矩陣,如果要對行號和列號相等的位置的元素求和,可以執行以下操作:

sum = 0
for i = 0 to min(rowcount,colcount)
  sum += matrix[i][i]
end-for
print sum

取決於如何定義對角線元素。 如果我們將對角線元素定義為- 單元格,對角線穿過該單元格在單元格中心附近NEAR的某處 ,則矩陣的對角線元素:

在此處輸入圖片說明

(0,0);(1,0);(2,1);(3,1);(4,2);(5,2)將完全有效。

好吧,這里的主要問題是,如果不是方形矩陣,對角線元素的定義是什么。 如果是方矩陣,則應為RowCount == ColCount。 但是,如果不是方矩陣呢?

編碼是正確的; 只有方陣具有對角線元素。 我想您想在rownum == colnum處添加元素?

我的猜測是忽略非正方形的多余行或列; 這似乎是最合理的方法,盡管這只是一個猜測,因為未定義非正方形矩陣的對角線,但是由於您要問的是2維數組而不是矩陣,所以我假設問題是編程任務,而不是線性代數。

為此,您可以獲取行和列的最小長度,然后從0迭代到該最小長度:

diag_len = min (row_size, col_size);

for (int i = 0; i < /* or <= */ diag_len; i++) {
  answer += my_data[i][i];
}

這在平方和有損非平方情況下均適用。 您的示例代碼最終考慮了每個單元格的坐標,當您僅知道row == col的情況時,這是浪費的。 (當row&col均為0 避免除法時,這也消除了特殊情況的需要,這比加法慢CPU操作。)

包括

int main(){

int a [10] [10],i,j,sum = 0,m,n;

printf(“ \\ n輸入矩陣的行和列:”); scanf(“%d%d”,&m,&n);

printf(“ \\ n輸入矩陣的元素:”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM