中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

C語言經(jīng)典算法 - 上三角、下三角、對稱矩陣

2018-07-20    來源:open-open

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
說明
上三角矩陣是矩陣在對角線以下的元素均為0,即Aij = 0,i > j,例如:
1 2 3 4 5
0 6 7 8 9
0 0 10 11 12
0 0 0 13 14
0 0 0 0 15
下三角矩陣是矩陣在對角線以上的元素均為0,即Aij = 0,i < j,例如:
1 0 0 0 0
2 6 0 0 0
3 7 10 0 0
4 8 11 13 0
5 9 12 14 15
對稱矩陣是矩陣元素對稱于對角線,例如:
1 2 3 4 5
2 6 7 8 9
3 7 10 11 12
4 8 11 13 14
5 9 12 14 15
上三角或下三角矩陣也有大部份的元素不儲存值(為0),我們可以將它們使用一維陣列來儲存
以節(jié)省儲存空間,而對稱矩陣因為對稱于對角線,所以可以視為上三角或下三角矩陣來儲存。
解法
假設(shè)矩陣為nxn,為了計算方便,我們讓陣列索引由1開始,上三角矩陣化為一維陣列,若以
列為主,其公式為:loc = n*(i-1) - i*(i-1)/2 + j
化為以行為主,其公式為:loc = j*(j-1)/2 + i
下三角矩陣化為一維陣列,若以列為主,其公式為:loc = i*(i-1)/2 + j
若以行為主,其公式為:loc = n*(j-1) - j*(j-1)/2 + i
公式的導(dǎo)證其實是由等差級數(shù)公式得到,您可以自行繪圖并看看就可以導(dǎo)證出來,對于C/C++
或Java等索引由0開始的語言來說,只要將i與j各加1,求得loc之后減1即可套用以上的公式。
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main(void)
{
  int arr1[N][N] = {
{1, 2, 3, 4, 5},
{0, 6, 7, 8, 9},
{0, 0, 10, 11, 12},
{0, 0, 0, 13, 14},
{0, 0, 0, 0, 15}};
int arr2[N*(1+N)/2] = {0};
  int i, j, loc = 0;
  printf("原二維資料:\n");
  for (i = 0; i < N; i++)
  {
    for (j = 0; j < N; j++)
    {
      printf("%4d", arr1[i][j]);
    }
    printf("\n");
  }
  printf("\n以列為主:");
  for (i = 0; i < N; i++)
  {
    for (j = 0; j < N; j++)
    {
      if (arr1[i][j] != 0)
        arr2[loc++] = arr1[i][j];
    }
  }
  for (i = 0; i < N *(1+N) / 2; i++)
    printf("%d ", arr2[i]);
  printf("\n輸入索引(i, j):");
  scanf("%d, %d", &i, &j);
  loc = N * i - i *(i + 1) / 2+j;
  printf("(%d, %d) = %d", i, j, arr2[loc]);
  printf("\n");
  return 0;
}

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:C語言經(jīng)典算法 - 多維矩陣轉(zhuǎn)一維矩陣

下一篇:C++編寫的俄羅斯方塊代碼