1. 程式人生 > 其它 >ASPX.net寫一個去除手機號碼和QQ號等聯絡方式程式碼

ASPX.net寫一個去除手機號碼和QQ號等聯絡方式程式碼

高斯消元是解決線性方程組的方法。
線性方程組,就是n元一次方程組,
\(\left\{\begin{matrix} a_{11}*x_{1}+a_{12}*x_{2}+……+a_{1n}*x_{n}=b_{1} & & & & \\ a_{21}*x_{1}+a_{22}*x_{2}+……+a_{2n}*x_{n}=b_{2} & & & & \\ …… & & & & \\ a_{n1}*x_{1}+a_{n2}*x_{2}+……+a_{nn}*x_{n}=b_{n} & & & & \end{matrix}\right.\)


要如何去解,我們可以從二元一次方程組入手。
\(\left\{\begin{matrix} a_{11}*x_{1}+a_{12}*x_{2}=b_{1} \\ a_{21}*x_{1}+a_{22}*x_{2}=b_{2} \end{matrix}\right.\)
解這個方程只需要將下面這個式子減去上面這個式子乘上\((-a_{22}/a_{12})\),求出\(x_{1}\),在將\(x_{1}\)代入上面這個式子求出\(x_{2}\)就可以了
通過二元一次方程組的消元操作,可以發現需要解出n元一次方程組的第一步就是將這個方程組經過一些操作轉換為
\(\left\{\begin{matrix} a_{11}^{`}*x_{1}+a_{12}^{`}*x_{2}+……+a_{1n}^{`}*x_{n}=b_{1}^{`} & & & & \\ a_{21}^{`}*x_{1}+a_{22}^{`}*x_{2}+……+0=b_{2}^{`} & & & & \\ a_{31}^{`}*x_{1}+a_{32}^{`}*x_{2}+……+0+0=b_{3}^{`} & & & & \\ …… & & & & \\ a_{n1}^{`}*x_{1}+0+……0+0=b_{n}^{`} & & & & \end{matrix}\right.\)

完成這步操作也不難,從第1行開始向下消元,第i行的消元就是將i+1行到n行的第n+1-i列數消成0。
下一步就是從最後一行開始,一元一次方程求解,每次求出的解還要代入方程組的其餘方程中,最終求出\(x_{1}\)\(x_{n}\)的解。
無解的情況就是操作過程中的任意除數等於零的情況。
程式碼如下:

#include<iostream>
using namespace std;
int n;
double a[110][110],b[110];
double x[110];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
		cin>>b[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(a[i][n+1-i]==0){
				cout<<"No Solution";
				return 0;
			}
			double t=a[j][n+1-i]/a[i][n+1-i];
			for(int k=1;k<=n;k++){
				a[j][k]-=t*a[i][k];
			}
			b[j]-=t*b[i];
		}
	}
	for(int i=1;i<=n;i++){
		if(a[n+1-i][i]==0){
			cout<<"No Solution";
			return 0;
		}
		x[i]=b[n+1-i]/a[n+1-i][i];
		for(int j=1;j<n+1-i;j++){
			b[j]-=a[j][i]*x[i];
		}
	}
	for(int i=1;i<=n;i++){
		printf("%.2lf\n",x[i]);
	}
	return 0;
}