这就是一道简单的线性代数问题,三阶矩阵求值。
代码如下
#include<stdio.h>
#include<string.h>
__int64 a[3][3],b[3],c[3][3];
__int64 cal()
{
return a[0][0]*(a[1][1]*a[2][2]-a[1][2]*a[2][1])
-a[0][1]*(a[1][0]*a[2][2]-a[1][2]*a[2][0])
+a[0][2]*(a[1][0]*a[2][1]-a[1][1]*a[2][0]);
}
double val(double a)
{
if(a<0.0005&&-0.0005<a)
return 0;
return a;
}
void main()
{
int i,j,t;
__int64 A,ans[3];
scanf("%d",&t);
while(t--)
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%I64d",&a[i][j]);
c[i][j]=a[i][j];
}
scanf("%I64d",&b[i]);
}
A=cal();
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
a[j][i]=b[j];
ans[i]=cal();
for(j=0;j<3;j++)
a[j][i]=c[j][i];
}
for(i=0;i<3;i++)
printf("%I64d ",ans[i]);
printf("%I64d\n",A);
if(A==0)
printf("No unique solution\n");
else
{
printf("Unique solution:");
for(i=0;i<3;i++)
printf(" %.3f",val(ans[i]*1.0/A));
printf("\n");
}
printf("\n");
}
}