行列式求值
上代码:(看注释就行)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define MAX 11//题目给的是10乘以10的,所以搞个11没毛病 int Fun(int n, int a[MAX][MAX] );//提前声明函数体,下位才是函数正文 int main() { int n = 0; int i=0,j=0;//n为行列数,i为行,j为列 int a[MAX][MAX] = {{0}};//矩阵初始化为0(好像没啥用QWQ) scanf("%d",&n);//输入n for( i = 0; i < n; i++) for( j = 0; j < n; j++) scanf("%d",&a[i][j]); //输入行列式各个元素 printf("%d\n",Fun(n,a));//输出行列式值 return 0;
} int Fun(int n,int a[MAX][MAX])//一个递归求值 { int i=0,j=0,c=0;//学过行列式的人知道,一个行列式的值是由行列式余子式的值再考虑正负号相加得来的 int b[MAX][MAX]={{0}}; int p=0, q=0; int sum=0; if(n==1) return a[0][0]; for(i=0;i<n;i++)//此递归函数模拟的是递归求各个函数的余子式,以下为求余子式的过程 { for(c=0;c<n-1;c++) { if(c<i)//仔细看,这四行是筛去某一元素所在行和列的一个过程,c<i就是判断是不是在这一行 p=0; else p=1; for(j=0;j<n-1;j++) { b[c][j]=a[c+p][j+1]; } } if(i%2==0)q=1;//判断正负号 else q=(-1); sum+=a[i][0]*q*Fun(n-1,b); } return sum;//返回求的值 }
完结撒花✿✿ヽ(°▽°)ノ✿