约旦消元80pts求助
查看原帖
约旦消元80pts求助
357101
wshcl楼主2023/9/4 14:17

WA on #3 #7 #10

#include <bits/stdc++.h>
typedef long double ld;
using namespace std;
const ld eps = 1e-15;
const int N = 1e2 + 7;

ld a[N][N];

int n;

signed main() {
	scanf("%d", &n);
	
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= n + 1; ++j)
			scanf("%LF", a[i] + j);
	
	bool flag = false;
	
	for (int i = 1; i <= n; ++i) {
		int maxx = i;
		
		for (int j = i + 1; j <= n; ++j)
			if (fabs(a[j][i]) > fabs(a[maxx][i])) //选出该列最大系数
				maxx = j;
		
		for (int j = 1; j <= n + 1; ++j)
			swap(a[i][j], a[maxx][j]);
		
		if (fabs(a[i][i]) < eps)
			return puts("-1"), 0;
			
		for (int j = 1; j <= n; ++j)
			if (j != i) {
				ld c = a[j][i] / a[i][i];
				
				for (int k = i + 1; k <= n + 1; ++k)
					a[j][k] -= a[i][k] * c;
			}
	}
	
	for (int i = 1; i <= n; ++i)
		if (fabs(a[i][i]) < eps && fabs(a[i][n + 1]) < eps)
			return puts("0"), 0;
	
	for (int i = 1; i <= n; ++i)
		printf("x%d=%.2LF\n", i, fabs(a[i][n + 1] / a[i][i]) < eps ? 0 : a[i][n + 1] / a[i][i]);
	
	return 0;
}

2023/9/4 14:17
加载中...