学习打卡day8

描述

编写可以计算行列式的代码

输入矩阵阶数 7>=N>=2

输入一个矩阵,值为int类型

输出计算行列式得到的值

输入样例


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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值