描述
编写可以计算行列式的代码
输入矩阵阶数 7>=N>=2
输入一个矩阵,值为int类型
输出计算行列式得到的值
输入样例
3
1 1 1
1 1 1
1 1 1
输出
0
代码
//矩阵hanglishi
#include <stdio.h>
int hls(int (*a)[10],int jie);
int main()
{
int n;
int juz[10][10];
scanf("%d",&n);
//读入矩阵
for(int i=0;i<=n-1;i++){
for(int j=0;j<=n-1;j++){
scanf("%d",&juz[i][j]);
}
}
//打印矩阵
for(int i=0;i<=n-1;i++){
printf("\n");
for(int j=0;j<=n-1;j++){
printf("%4d",juz[i][j]);
}
printf("\n");
}
printf("\n该矩阵对应行列式的值为 %d",hls(juz,n));
}
int hls(int (*a)[10],int jie)
{
int res=0;
if(jie==2){
res=a[0][0]*a[1][1]-a[0][1]*a[1][0];
return res;
}
int first[jie];
for(int i=0;i<=jie-1;i++){
first[i]=a[0][i];
//第一行的元素
if((i+1+1)%2==1) first[i]=-first[i];
//加符号
//printf("$$%d$$\n",first[i]);
}
//以第一行展开的余子式
for(int i=1;i<=jie;i++){
int lowjz[10][10];
int lowi=0;
int lowj=0;
int forbi=i-1;//去掉的列
//char fhao=(1+forbi+1)%2?'-':'+';
// printf("%d\n",(1+(forbi+1))%2);
// printf("%c\n",fhao);
for(int hi=1;hi<=jie-1;hi++,lowi++){
int lowj=0;
for(int j=0;j<=jie-1;j++){
if(j!=forbi){
// printf("%d ",a[hi][j]);
//处理好新行列式的行标lowi列标lowj
lowjz[lowi][lowj]=a[hi][j];
lowj++;
}
}
//printf("\n");
}
/*
printf("\n低阶######\n");
printf("%d\n",first[i-1]);
for(int lli=0;lli<=jie-2;lli++){
for(int llj=0;llj<=jie-2;llj++){
printf("%d ",lowjz[lli][llj]);
}
printf("\n");
}
printf("\n低阶######\n");
*/
res= res+ (first[i-1]*hls(lowjz,jie-1));//递归
}
return res;
//printf("%d",a[1][1]);
return 0;
}