···
import java.util.*;
public class Main{
static int N = 110,n;
static double eps = 1e-6;
static double[][] a = new double[N][N];
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i=0;i[HTML_REMOVED]Math.abs(a[t][c])) t=i;
}
if(Math.abs(a[t][c])[HTML_REMOVED]=c;i–) a[r][i]/=a[r][c];
for(int i=r+1;i[HTML_REMOVED]eps)
for(int j=n;j>=c;j–) a[i][j]-=a[r][j]*a[i][c];
}
r++;
}
if(r<n){
for(int i=r;i<n;i++) if(Math.abs(a[i][n])>eps) return 2;
return 1;
}
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++) a[i][n] -= a[i][j]*a[j][n];
}
return 0;
}
public static int guass(){
int r,c;
//遍历每一列
for(r=0,c=0;c<n;c++){
int t=r;
//找一列中的最大值
for(int i=r;i<n;i++){
if(Math.abs(a[i][c])>Math.abs(a[t][c])){
t=i;
}
}
//如果找出的最大值为0,继续下一列寻找非0的最大值
if(Math.abs(a[t][c])<eps)continue;
//交换
for(int i=c;i<=n;i++){
double temp=a[t][i];
a[t][i]=a[r][i];
a[r][i]=temp;
}
//将当前的非0第一位数置为1,构造阶梯矩阵的斜边
//这里要注意从后往前去更新数据,因为这里变化是根据第一个数变化的,要保持它的数据最后变化或者找个数存一下
for(int i=n;i>=c;i--){
a[r][i]/=a[r][c];
}
//下面一步就是用上面那一行来更新下面的所有行,同样要注意从后往前更新数据
//注意只需要对首位非0的行进行更新就行
for(int i=r+1;i<n;i++){
if(Math.abs(a[i][c])>eps) {
for(int j=n;j>=c;j--){
a[i][j]-=a[r][j]*a[i][c];
}
}
}
//进行下一行的处理
r++;
}
//0解或者无穷解
if(r<n){
//阶梯状,更新不了下面的说明往下的都是0;判断下面每一行的最后结果,如果不是0,说明无解
for(int i=r;i<n;i++){
if(Math.abs(a[i][n])>eps)return 2;
}
return 1;
}
//处理唯一解,从下往上得出解
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++){
a[i][n]-=a[j][n]*a[i][j];//a[j][n]这里的横坐标为j是因为需要从这一行往下清空干净,可以举个3*4的例子
}
}
//唯一解
return 0;
}
}
···