📄 matrix_ahoi07_door.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <math.h>
const int maxn = 210;
const double eps=1e-5;
int n;
double A[maxn][maxn],B[maxn][maxn];
void init() {
scanf("%d",&n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) {
scanf("%lf",&A[i][j]);
B[i][j]=(double)(i==j);
}
}
void swap(double &x,double &y) {
double t=x;x=y;y=t;
}
void work() {
for (int i=1;i<=n;i++) {
int line=i;
for (int j=i+1;j<=n;j++)
if (fabs(A[j][i])>fabs(A[line][i]))
line=j;
for (int j=1;j<=n;j++) {
swap(A[line][j],A[i][j]);
swap(B[line][j],B[i][j]);
}
double tmp=A[i][i];
for (int j=1;j<=n;j++) {
A[i][j]/=tmp;
B[i][j]/=tmp;
} //将A[i][i]变成1
for (int j=1;j<=n;j++)
if (j!=i) { //将A[j][i] (j!=i) 变成0
tmp=A[j][i];
for (int k=1;k<=n;k++) { //初等变换 整行操作..
A[j][k]-=A[i][k]*tmp; //A[j][i]-=A[i][i]*A[j][i]=0
B[j][k]-=B[i][k]*tmp;
}
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) {
printf("%.0lf",B[i][j]+eps);
if (j<n)
printf(" ");
else
printf("\n");
}
}
int main() {
freopen("door.in","r",stdin);
freopen("door.out","w",stdout);
init();
work();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -