1. 程式人生 > >【上三角下三角對稱矩陣】

【上三角下三角對稱矩陣】

/*
上三角下三角對稱矩陣

說明:
上三角矩陣是矩陣在對角線以下的元素均為0,即A ij = 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,即A ij = 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 8     8     9
3 7 10     11    12
4 8 11     13  14
5 9 12     14  15
上三角或下三角矩陣也有大部份的元素不儲存值(為0),我們可以將它們使用一維陣列來儲存以節省儲存空間,而對稱矩陣因為對
稱於對角線,所以可以視為上三角或下三角矩陣來儲存。

解法:
假設矩陣為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
公式的導證其實是由等差級數公式得到,您可以自行繪圖並看看就可以導證出來,對於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; }

相關推薦

三角三角對稱矩陣

/* 上三角下三角對稱矩陣 說明: 上三角矩陣是矩陣在對角線以下的元素均為0,即A ij = 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

Brief introduction to Java String Split 簡單介紹Java String Split

a-z include cte eve class some sim string arr Split is a common function in Java. It split a full string to an array based on delimeter.

Cmake新手使用日記(1)C++11的初體驗

pen 如何 其他 err ++ targe 使用 可執行文件 使用教程   第一次使用Cmake,搜索了很多使用教程,包括《Cmake實踐》、《Cmake手冊》等,但是在針對最新的C++11條件下編程還是會存在一點點問題,需要實驗很多次錯誤並搜索大量文章才能解決問題。這裏

python linux定時任務跑crontab -e使用

/etc/crontab 就是crontab 的配置檔案 linux 下輸入命令 crontab -l 查詢當前系統使用者設定了哪些執行任務 linux 下輸入命令 crontab -r 清空當前系統使用者設定的所有任務 linux 下輸入命令 crontab -e 編輯和設定當前系統使用者要

Linux伺服器開發環境搭建安裝多個tomcat

上篇文章我們簡單介紹瞭如何在Linux環境下安裝單個的tomcat容器。 檢視如可安裝單個tomcat:https://blog.csdn.net/weixin_37519752/article/de

leetcode 二叉樹對稱判斷Symmetric Tree

1、題目 Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center)

三角三角對稱矩陣

com -c 分享圖片 mark ocs RoCE follow www nag 由於作者不習慣該編輯器,只是貼出上本文的截圖,詳見:https://www.yuque.com/docs/share/58600c72-cbca-4915-acab-a913896adcf2

4三角三角對稱矩陣

說明 上三角矩陣是矩陣在對角線以下的元素均為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

劍指offer{19-22}順時針列印矩陣、包含min函式的棧、棧的壓入彈出序列、從列印二叉樹

順時針列印矩陣、包含min函式的棧、棧的壓入彈出序列、從上往下列印二叉樹 順時針列印矩陣 題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣:

2015年大二-資料結構-陣列與廣義表(2)-4.三角矩陣的壓縮儲存及基本運算

/* *Copyright (c) 2014,煙臺大學計算機學院 *All rights reserved. *檔名稱:Annpion.cpp *作者:王耀鵬 *完成日期:2015年12月16日 *版本號:v1.0 * *問題描述:下三角矩陣的壓縮儲存及基本運算 *輸入描述

1.1.11怎麼用一維陣列表示對稱矩陣三角

需要注意的是,下標為i,j的時候,表示前面有0,1,2,···,i-1行分別有1,2,···,i個元素即有i(i+1)i/2+j-1個元素在前面。所以下標為i,j的為第i(i+1)/2+j個元素。#include<stdio.h>#include<stdli

劍指offer之打印二叉樹

emp pub push coder 二叉 spa cti public ott 題目:   從上往下打印二叉樹 鏈接:   https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701?tpId=13

每天一個linux命令(文件載文件操作):轉載tar命令

設備 mil second compress bsp 新的 body 創建 命令格式   通過SSH訪問服務器,難免會要用到壓縮,解壓縮,打包,解包等,這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小,五臟俱全,功能強大。   tar

每天一個linux命令(文件載文件操作):轉載gzip命令

明顯 相關信息 users 版本信息 通過 inux 備份 示例 strong   減少文件大小有兩個明顯的好處,一是可以減少存儲空間,二是通過網絡傳輸文件時,可以減少傳輸的時間。gzip是在Linux系統中經常使用的一個對文件進行壓縮和解壓縮的命令,既方便又好用。gzip

python遠程使用rsa登錄sftp,載文件

inf dsa nbsp ica linux服務 出現 ima zed 就是 出現這個錯誤是的做法是: 將公鑰放在待遠程登錄的主機的authentication_keys文件中即可。 操作:cat id_rsa.pub << authorized_keys

將文件拖曳到窗體, 並獲取其完整路徑 C++ Builder實現

pat ext stc fff led CP tle 聲明 net 1. 在窗體的頭文件.h裏聲明處理函數和消息映射, 如: [cpp] view plain copy class TForm1 : public TForm {

Web自動化測試——代碼篇八常用方法——傳/載文件

.com instance timeunit 鍵盤 .sh exception lse NPU 組合 上傳文件 對於Web頁面的上傳功能實現一般有一下倆種方式: 普通上傳:將本地文件的路徑作為一個值放在input標簽中,通過form表單將這個值提交給服務器(不做介紹sen

劍指Offer22從列印二叉樹

題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 時間限制:1秒;空間限制:32768K 解題思路 思路和層次遍歷相似,定義兩個list一個用來記錄當前層的節點,一個用來記錄當前每個節點的左右孩子節點,迴圈列印更新。 Python程式碼: # -*- codi

[18/11/16]列印三角三角

1 /* 2 列印圖案 考察for迴圈的巢狀*/ 2 #include<stdio.h> 3 int main () 4 {

劍指offer分行從列印二叉樹,層次遍歷,每一層在一行輸出

與上一篇部落格層次遍歷二叉樹不同,這次是需要將每一層列印在同一行,這就需要判斷每一層的元素: 注意到,將每一層列印完了之後,下面的一層也全部進入到了佇列,因此採用一個計數器:nextLevel來計算下一層的個數,使用toBeList計算這層還麼有列印完的個數 初始nextLevel =