C语言经典算法 - 上三角、下三角、对称矩阵
发布时间:2020-12-16 07:46:07 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 说明 上三角矩阵是矩阵在对角线以下的元素均为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 下三角矩阵是矩
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
说明
上三角矩阵是矩阵在对角线以下的元素均为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),我们可以将它们使用一维阵列来储存 以节省储存空间,而对称矩阵因为对称于对角线,所以可以视为上三角或下三角矩阵来储存。 解法 假设矩阵为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},10,11,12},13,14},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,arr2[loc]); printf("n"); return 0; } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |