Gauss消元
给定一个线性方程组,对其求解
第一行,一个正整数 nnn
第二至 n+1n+1n+1行,每行 n+1n+1n+1 个整数,为a1,a2?an a_1, a_2 \cdots a_na1?,a2??an? 和 bbb,代表一组方程。
共n行,每行一个数,第 iii行为 xix_ixi? (保留2位小数)
如果不存在唯一解,在第一行输出"No Solution".
3 1 3 4 5 1 4 7 3 9 3 2 2
-0.97 5.18 -2.39
1≤n≤100,∣ai∣≤104,∣b∣≤1041 \leq n \leq 100, \left | a_i \right| \leq {10}^4 , \left |b \right| \leq {10}^4 1≤n≤100,∣ai?∣≤104,∣b∣≤104
思路:简单的高斯消元
#include <bits/stdc++.h> using namespace std; double a[101][101],p2; int p1,n; int main() { scanf("%d",&n); for (int i=1;i<=n;i++){ for (int j=1;j<=n+1;j++){ scanf("%lf",&a[i][j]); } } for (int i=1;i<=n;i++){ p1=i; while (a[p1][i]==0 && p1<=n){ p1++; } if (p1==n+1){ puts("No Solution"); return 0; } for (int j=i;j<=n+1;j++){ swap(a[i][j],a[p1][j]); } p2=a[i][i]; for (int j=i;j<=n+1;j++){ a[i][j]=a[i][j]/p2; } for (int j=1;j<=n;j++){ if (j!=i){ p2=a[j][i]; for (int k=i;k<=n+1;k++){ a[j][k]-=a[i][k]*p2; } } } } for (int i=1;i<=n;i++){ printf("%.2lf\n",a[i][n+1]); } return 0; }
原文:https://www.cnblogs.com/xiangweicheng/p/11484407.html