#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double determinant(int n, double A[][25]);
int Cramer(int n, double A[][25], double b[], double x[]);
int main(){
int n;
scanf("%d", &n);
double A[25][25], b[25], x[25];
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
scanf("%lf", &A[i][j]);
}
}
for(int i = 0;i < n; i++){
scanf("%lf", &b[i]);
}
int flag = Cramer(n, A, b, x);
if(flag){
for(int i = 0; i < n; i++){
printf("%lf ", x[i]);
}
}
else{
printf("Fail.");
}
}
double determinant(int n, double A[][25]){
double ret = 0;
double B[25][25];
if (n == 1) {
ret = A[0][0];
} else {
for(int i=0; i<n; i++) {
for (int j=0; j<i; j ++) {
for (int k=1; k<n; k ++) {
B[j][k-1] = A[j][k];
}
}
for (int j=i; j<n; j ++) {
for (int k=1; k<n; k ++) {
B[j][k-1] = A[j+1][k];
}
}
ret += A[i][0] * pow(-1, i+0) * determinant(n-1, B);
}
}
return ret;
}
int Cramer(int n, double A[][25], double *b, double *x){
double D = determinant(n, A);
double As[25][25];
if(D > 1e-15){
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
As[i][j] = A[i][j];
}
}
for(int k=0; k<n; k++){
for (int l=0; l<n; l++) {
As[l][k] = b[l];
}
x[k] = determinant(n, As) / D;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
As[i][j] = A[i][j];
}
}
}
return 1;
}
return 0;
}
Cramer法则
最新推荐文章于 2023-11-20 10:57:03 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)