Algorithm Gossip (48) 上三角、下三角、对称矩阵

前言

This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。

提出问题

48.Algorithm Gossip: 上三角、下三角、对称矩阵

说明

理解基础的线性代数基础, 判断上三角、下三角、对角阵, 会算行列式的结果, 也就是化下三角; 可以尝试下。

定位

基础题

分析和解释

代码

#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("原二维资料:
");
		for(i = 0; i < N; i++) {
			for(j = 0; j < N; j++) {
				printf("%4d", arr1[i][j]);
				}
			printf("
");
			}
		printf("
以列为主:");
		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("
输入索引(i, j):");
		scanf("%d, %d", &i, &j);
		loc = N*i - i*(i+1)/2 + j;
		printf("(%d, %d) = %d", i, j, arr2[loc]);
		printf("
");
		return 0;
		}

拓展和关联

后记

参考书籍

  • 《经典算法大全》
  • 维基百科
原文地址:https://www.cnblogs.com/actanble/p/6711237.html