1. 题目
2. 题解
高斯消元模板题
模仿人类消元的做法就好了
至于 No Solution 的情况。。。就是当前所有方程中某一个未知数的系数都为 0,那这个未知数就能有多种值。
顺便安利一下 boshi dalao 和 kb dalao 写高斯消元的博客:
boshi:https://www.mina.moe/?p=1398
kb:http://blog.csdn.net/litble/article/details/72851568
代码:
#include <bits/stdc++.h>
using namespace std;
int n,h[105];
double arr[105][105],ans[105];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;h[i]=i,i++)for(int j=0;j<=n;j++)scanf("%lf",&arr[i][j]);
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
if(fabs(arr[h[i]][i])<fabs(arr[h[j]][i]))swap(h[i],h[j]);
if(fabs(arr[h[i]][i])<1e-8)printf("No Solution\n"),exit(0);
for(int j=n;j>=i;j--)arr[h[i]][j]/=arr[h[i]][i];
for(int j=i+1;j<n;j++)
for(int k=n;k>=i;k--)
arr[h[j]][k]-=arr[h[i]][k]*arr[h[j]][i];
}
for(int i=n-1;i>=0;i--)
{
ans[i]=arr[h[i]][n];
for(int j=i+1;j<n;j++)ans[i]-=arr[h[i]][j]*ans[j];
}
for(int i=0;i<n;i++)printf("%.2f\n",ans[i]);
return 0;
}
0 条评论