有亿点小疑问
查看原帖
有亿点小疑问
363036
chlchl楼主2022/7/17 17:00

这个题我已经过了,但是我的代码测以下样例是 No Solution

输入:

3
2 0 0 1
1 0 2 1
7 1 0 2

输出:

0.50
-1.50
0.25

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 100 + 10; 
int n;
double a[N][N];

bool gauss(int n, int m){//n变量数,m方程数 
	for(int i=1;i<=n;i++){
		int idx = i;
		for(int j=i+1;j<=m;j++)	if(fabs(a[j][i]) > fabs(a[idx][i]))	idx = i;
		if(idx != i)	for(int j=i;j<=n+1;j++)	swap(a[idx][j], a[i][j]);
		if(fabs(a[i][i]) < 1e-10)	return 0;
		for(int k=i+1;k<=m;k++){
			for(int j=n+1;j>=i;j--)	a[k][j] -= a[k][i] / a[i][i] * a[i][j];
		}//把第k行第i个数全部变成 0	
	}
	for(int i=n;i>=1;i--){
		for(int j=i+1;j<=n;j++)	a[i][n + 1] -= a[i][j] * a[j][n + 1];
		a[i][n + 1] /= a[i][i];
	}
	for(int i=1;i<=n;i++)	printf("%.2f\n", a[i][n + 1]);
	return 1;
}

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]);
	if(!gauss(n, n))	printf("No Solution\n");
	return 0;
}
2022/7/17 17:00
加载中...