1340-逆矩阵问题
描述
给定2 个n×n矩阵a 和b,试设计一个判定a 和b 是否互逆的蒙特卡罗算法,算法的计算时间应为O(n2)。设计一个蒙特卡罗算法,对于给定的矩阵a和b,判定其是否互逆。
输入
输入的第一行有1个正整数n,表示矩阵a和b 为n×n矩阵。接下来的2n行,每行有n个实数,分别表示矩阵a和b 中的元素。
输出
矩阵a 和b 互逆则输出YES,否则输出NO。
样例输入
3
1 2 3
2 2 3
3 3 3
-1 1 0
1 -2 1
0 1 -0.666667
样例输出
YES
#include<stdio.h> #include<math.h> #define N 20 int main() { //freopen("a.txt","r",stdin); float a[N][N],b[N][N],c[N][N]={0}; int n,i,j,k,f; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%f",&a[i][j]); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%f",&b[i][j]); for(i=0;i<n;i++) for(j=0;j<n;j++) for(k=0;k<n;k++) c[i][j]+=a[i][k]*b[k][j]; for(i=0;i<n;i++) { for(j=0;j<n;j++) { f=1; if(i!=j) { if(fabs(c[i][j])<=0.00001) f=0; } else { if(fabs(c[i][j]-1)<=0.00001) f=0; } } } if(f==1) printf("NO\n"); else printf("YES\n"); return 0; }