gghack_Nythix @ 2024-08-04 09:01:02
rt,请指出我源代码的问题,不要直接发给我你的AC代码。
#include<bits/stdc++.h>
using namespace std;
int n;
double a[1005][1005];
double check[1005];
void Consumption() {
// int row = 1;
for(int i = 1;i <= n;++i) {
for(int j = i + 1;j <= n;++j) {
if(fabs(a[j][i]) > 1e-2) {for(int k = 1;k <= n + 1;++k) swap(a[i][k],a[j][k]); break;}
}
if(fabs(a[i][i]) < 1e-12) continue;
for(int j = 1;j <= n;++j) {
if(j == i) continue;
double rt = a[j][i] / a[i][i];
for(int k = i;k <= n + 1;++k) a[j][k] -= a[i][k] * rt;
}
// ++row;
}
bool flag2 = 0;
for(int i = 1;i <= n;++i){
bool flag = 0;
for(int j = 1;j <= n;++j){
if(fabs(a[i][j]) > 1e-12) flag = 1;
}
if(!flag){
flag2 = 1;
if(fabs(a[i][n + 1]) > 1e-12) return cout << "-1\n",void();
}
}
if(flag2) {
return cout << "0\n",void();
}
for(int i = 1;i <= n;++i) cout << "x" << i << "=" << fixed << setprecision(2) << double(a[i][n + 1] / a[i][i]) << '\n';
return ;
}
signed main(){
cin >> n;
for(int i = 1;i <= n;++i) for(int j = 1;j <= n + 1;++j) cin >> a[i][j];
return Consumption(),0;
}
by jmy2012 @ 2024-08-04 09:11:46
没有判断无解情况
by szh_AK_all @ 2024-08-04 09:14:13
@gghack_Nythix
精度问题吧
by jmy2012 @ 2024-08-04 09:15:05
我看到的是正确答案-1,输出0
by szh_AK_all @ 2024-08-04 09:15:17
if(fabs(a[j][i]) > 1e-2)
这些误差都开1e-9吧,然后开Long double
by szh_AK_all @ 2024-08-04 09:15:53
@jmy2012
if(fabs(a[i][n + 1]) > 1e-12) return cout << "-1\n",void();
并不代表他没有判断无解情况
by szh_AK_all @ 2024-08-04 09:18:48
@jmy2012
你知道并不代表你可以解决他的问题
by jmy2012 @ 2024-08-04 09:19:38
1e-2?
by szh_AK_all @ 2024-08-04 09:19:58
@gghack_Nythix
这个row还是要用上的吧
by gghack_Nythix @ 2024-08-04 09:29:50
@szh_AK_all 我把row去掉100,加上90
by szh_AK_all @ 2024-08-04 09:30:26
@gghack_Nythix
但是特判的时候也要用row