行列式求值

c++ 将行列式化为上三角行列式,并求值。 c++ 将行列式化为上三角行列式,并求值。 #include<stdio.h> #include<iostream> using namespace std; void op(double *a,int row,int col,int temp) { double NUM1,NUM2; NUM1=a[temp*col+temp]; for(int i=temp... 阅读详情

行列式求值

Time Limit(Common/Java):10000MS/30000MS          Memory Limit:65536KByte
Total Submit:363            Accepted:65

Description

求 N 阶方阵对应的行列式值。

Input

输入数据包含多组测试案例。每组测试案例由N(0<N≤10)开头,N表示方阵阶数,后续N行每行包含N个实数。

Output

对于每个测试用例,行列式值打印在单独一行上,保留两位小数。

Sample Input

1
1
2
1 1.2
3 -3.4

Sample Output

1.00
-7.00

Source

南京邮电大学计算机学院首届ACM程序设计大赛(2009)


分析:终于AC了 T_T,学好数学的重要性

矩阵:

1 2 3

4 5 6

7 8 9

的行列式为:1*5*9+4*8*3+2*6*7-(3*5*7-6*8*1-2*4*9)

矩阵的输入简单:scanf("%lf",a[i][j]);

就是求行列式的问题。这里采用递归方法,精妙!

double acrush(double a[][N], int n)
{
	double p[N][N];
	double ret = 0.0;

	if(1 == n)
		return a[0][0];

	for(int k=0;k<n;k++)
	{
		for(int i=0;i<n-1;i++)
		{
			for(int j=0;j<n-1;j++)
			{
				if(i < k)
					p[i][j] = a[i][j+1];
				else //i >= k
					p[i][j] = a[i+1][j+1];
			}
		}
		ret += pow(-1.0, k) * a[k][0] * acrush(p, n-1);
	}
	
	return ret;
}
有个坑爹地方,一开始double p[N][N]; 定义在函数外部(全局定义),导致3阶以上就会出错,因为定义在外部的话,一旦递归作用,会导致二维数组p的元素变化,跳回原来的p的时候就不一样了。其实是个低级错误。

这里引出了一个二维数组形参的问题。

注意:二维数组的列必须是常量且必须写明。当然,也可以这样写:

double acrush(double **a, int n)
但是这样写的话,函数调用的时候就不能acrush(p, n-1) 了,因为p的定义是double p[N][N];

所以必须这样:malloc别忘了头文件:stdlib.h

double **p = (double **)malloc(sizeof(double *)*len);  
	for(int i=0;i<len;i++)  
		p[i] = (double *)malloc(sizeof(double)*len); 

但是递归还是很慢。行列式有很多更加好的方法。大一的线代都忘光了。。。

下面2种方法的代码:

No.1

#include<stdio.h>
#include<math.h>

#define N 10

//行列式求值

double a[N][N];

double acrush(double a[][N], int n)
{
	double p[N][N];
	double ret = 0.0;

	if(1 == n)
		return a[0][0];

	for(int k=0;k<n;k++)
	{
		for(int i=0;i<n-1;i++)
		{
			for(int j=0;j<n-1;j++)
			{
				if(i < k)
					p[i][j] = a[i][j+1];
				else //i >= k
					p[i][j] = a[i+1][j+1];
			}
		}
		ret += pow(-1.0, k) * a[k][0] * acrush(p, n-1);
	}
	
	return ret;
}

int main()
{
	int n;
	while(scanf("%d",&n) != EOF)
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
				scanf("%lf",&a[i][j]);
		}
		printf("%.2lf\n",acrush(a, n));
	}

	return 0;
}


No.2

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 10

//行列式求值

double acrush(double **a, int n)
{
	double ret = 0.0;
	int len = n-1;

	double **p = (double **)malloc(sizeof(double *)*len);  
	for(int i=0;i<len;i++)  
		p[i] = (double *)malloc(sizeof(double)*len); 

	if(1 == n)
		return a[0][0];

	for(int k=0;k<n;k++)
	{
		for(int i=0;i<len;i++)
		{
			for(int j=0;j<len;j++)
			{
				if(i < k)
					p[i][j] = a[i][j+1];
				else //i >= k
					p[i][j] = a[i+1][j+1];
			}
		}
		ret += pow(-1.0, k) * a[k][0] * acrush(p, n-1);
	}

	for(int i=0;i<len;i++) 
		free(*(p+i)); 
	free(p); 

	return ret;
}

int main()
{
	double a[N][N];
	int n;
	while(scanf("%d",&n) != EOF)
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
				scanf("%lf",&a[i][j]);
		}
		double **p = (double **)malloc(sizeof(double *)*n);  
		for(int i=0;i<n;i++) 
			p[i] = a[i]; 
		printf("%.2lf\n",acrush(p, n));
	}

	return 0;
}






高斯消元与行列式求值 高斯消元抹消了行列式递归定义中复杂的下标操作或者大幅的空间占用 阅读详情

相关推荐

Java实现行列式求值的高斯消元法

行列式,作为线性代数中的核心概念,是反映线性方程组、矩阵理论性质和解决线性问题的重要数学工具。它不仅仅是一个数值表达式,更是一个包含多重信息的集合。在几何中,行列式可以表示向量构成的平行多面体的体积。在代数中,行列式与矩阵的逆、秩等特性紧密相连,对于求解线性方程组、计算矩阵特征值等问题至关重要。理解行列式的定义及其背后的数学原理,对于IT行业中的算法工程师、数据分析专家以及科研工作者来说,不仅是理论基础的掌握,更是实践能力的提升。高斯消元法是一种在数值线性代数中用于求解线性方程组的算法。

weixin_35294091的博客 1053

矩阵行列式的计算

double hls(double *Metrix, int n) { double hls1=0; int i,j,k; double temp1,temp2; for(j=0;j { temp1=1.0;  for(k=0;k  {     if((k+j         temp1*=Metrix[k*n+k+j]; if((k+j)>n||(k+j)==n)

qq_32261049的博客 2009

2024.6.10丨基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释指南

本文详细介绍了基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释方法,涵盖工具安装、参数优化、数据库选择及实战案例解析。通过DIAMOND的快速比对和VFDB的全面毒力因子数据,显著提升微生物基因组研究效率,适用于临床检测、食品安全监测等多个场景。

weixin_33712987的博客 376

行列式的计算方法(含四种,看完就会!)

行列式的计算 前言 一、对角线法 二、代数余子式法 三、等价转化法 四、逆序数法 总结 本文主要讲述行列式的求解方法,所以本文侧重于方法的讲解,而并非推导。主要思路为从三阶行列式举例,再过渡到高阶行列式的通用方法

weixin_46664967的博客 83万+

DFX从芯片到系统:可制造性、可测试性与可靠性设计实战指南

DFX(Design for eXcellence)是一套面向产品全生命周期的设计方法论,涵盖可制造性(DFM)、可测试性(DFT)、可靠性(DFR)等维度。其核心原理是将制造、测试、维护等环节的约束前置到设计阶段,从而降低流片与量产风险。在芯片与系统硬件领域,DFX不仅是提升良率与测试效率的关键手段,更是保障车规、工控等严苛场景下长期稳定运行的基础。从芯片物理实现到PCB布局,再到系统级散热与维护设计,DFX的落地需要工具链、流程闸门与跨部门协作的体系化支撑。本文基于实际项目经验,分享DFX从设计决策到工

weixin_32349093的博客 350

(三)UPF之Domain Coverage Relationship(Cover、Equivalent、Independent)

整个Soc架构中一般会存在多个Power Domain,不同的Power Domain之间也存在着一定的Coverage关系。在Cadence工具中,这种。不同的Domain Coverage关系中,各个Domain存在着一定的关联()。

Mr.翟的博客 1424

行列式求值(C++)

C++实现行列式计算

m0_50793313的博客 3365

【一 扣子客户案例合集】【 1.1 抖音电商:通过扣子智能体重塑电商服务新体验】

**摘要:**抖音电商借助扣子(Coze)智能体平台重塑客服体验,通过无代码开发、多模态交互和跨平台发布等功能,解决了传统客服高峰期压力大、成本高及响应机械等痛点。智能体采用直接面客与人工监管结合模式,实现高效精准服务,并通过解构流程、模块化设计优化系统架构。其技术优势包括零配置学习、意图识别、情绪感知等,实际应用中显著提升客服效率300%以上,改善用户体验。未来将进一步拓展至商品推荐、直播互动等场景,推动电商服务智能化升级。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1570

行列式基础知识

行列式是一个数学概念,主要用于线性代数中,它是一个可以从方阵(即行数和列数相等的矩阵)形成的一个标量(即一个单一的数值)。1.以3阶行列式为例3阶行列式按行展开后为6项,每项为3个不同行不同列的3个元素相乘aij元素的行标i都是123的自然排列aij元素列标j则为:123、231、312、321、213、132,总数为3!=6N(123) = 0 偶数N(231) = 1 + 1 = 2 偶数N(312) = 2 偶数N(321) = 2 + 1 = 3 奇数。

m0_73723097的博客 5680

ADS基础教程16 - 存档和导入(workspace、cell、view)

选择workspace_Archive目录作为保存workspace归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择cell_Archive目录作为保存cell归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择view_Archive目录作为保存view归档的目录,点击打开进行目录选择,点击Finish保存目录。(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…

XZ_ZC的博客 3704

ABAP CDS Time Functions 全面解析:用 TIMS_IS_VALID 护航时刻字段的正确性

摘要:本文深入解析ABAP CDS时间函数TIMS_IS_VALID的应用,重点介绍其在企业系统时间字段校验中的关键作用。文章指出无效时间数据会导致业务流程混乱,而CDS层校验能有效减少重复逻辑。详细说明TIMS类型格式要求、空值处理规则,并提供两种工程实现方案:在CDS视图中直接派生校验列,或通过ABAP SQL在内存表中批量验证。最后给出可直接运行的代码示例,包括一个ABAP报表演示内存表验证,以及一个CDS View Entity实现系统时间自动映射与校验,帮助开发者在业务场景中快速落地时间校验功能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 193

行列式求值Java语言实现———线性代数

行列式求值对于刚刚学习完线性代数的大学生再熟悉不过了,同样于上一篇文章,这也是我们学习线性代数这个课程必须要掌握的知识点,但对于许多比较难算的题目,我依然想用代码帮助解决计算的问题,这种通过写代码来帮助我解决学习上的问题,能很大程度的提高我们写代码的能力,对于行列式的化简写代码的过程就简单多了。............

A198237645_的博客 2421

华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分)

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。

学Java,找哪吒 2040

高斯消元与行列式求值 part1

两道模板题,思路与算法却是相当经典。 先说最开始做的行列式求值,题目大致为给一个10*10的行列式,求其值 具体思路(一开始看到题我的思路): 1.暴算,把每种可能组合试一遍,求逆序数,做相应加减运算,一看就知道不是正解。 2.暴算2.0 用递归和代数余子式计算,但同样需计算逆序数。 3.一看就是知道是正解高斯消元,将行列式消为上三角,将对角线相乘。 看看代码: #include...

weixin_30681615的博客 338

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1632

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

二维数组之行列式求值

二维数组之行列式求值直接上代码代码如下: 直接上代码 本人之前都是做投资的,9月开始学java。在大佬门前班门弄斧,见笑了。。 老年人再出发不容易。。轻拍。 代码如下: 去[博客设置](https://mp.csdn.`在这里插入代码片`net/console/configBlog)页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 `代码片`.在这里插入代码片 ```javascript // An highlighted block var foo = 'bar'; ...

lecherme的博客 1475

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

uva 684 Integral Determinant 行列式求值

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=625 题意:给出一个n阶行列式,求值。 思路:模板参考http://blog.youkuaiyun.com/zhoufenqin/article/details/7779707: ...

weixin_30329623的博客 140

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

矩阵行列式求值

矩阵 行列式

2301_77896761的博客 167

《P7112 【模板】行列式求值》

摘要:本文实现了一个计算n阶行列式模p值的算法。输入包括n和p,以及n×n的矩阵元素。使用高斯消元法将矩阵转化为上三角矩阵,过程中处理行列交换对行列式符号的影响,并利用模运算保持数值范围。最终输出行列式模p的最小自然数值。算法时间复杂度为O(n³),适用于n≤600的情况。代码包含快速输入优化,处理大数取模运算。

Jasmine_llq的博客 153

【算法】n阶行列式求值 全排列

行列式求值&amp;amp;amp;&amp;amp;amp;全排列 个人感觉自己写的行列式求值的程序与全排列的程序有几分神似,所以就把它们放到一起啦。 先来看求n阶行列式的程序 #include&amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; //C语言初学者,欢迎大家指正 void show(int **p,int size)

loxs 2030

c语言行列式求值函数,行列式的求值(C语言版).doc

行列式的求值(C语言版)行列式的求值(C语言版)本程序用C语言实现行列式的求值,由于采用的是行列式中最原始的公式求解,其运行效率并不十分高,但可以保证只要电脑能跑下来,就可以算对.本人验证表明,对9阶以内的运行效果还可以.10阶就不好说了.本程序实际上是分二部分,第一部分是程序求0到n-1或1到n的全排列,并采用文件操作,将排列结果保存在一个文件中;第二部分是用数学方法求行列式的值,并从文件中读取...

weixin_35462903的博客 709
上一篇: IBM技术俱乐部主席竞选
下一篇: 数据离散化 & 线段树
tcherry
博客等级 码龄16年 46粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值