判无解无限解有误求调
查看原帖
判无解无限解有误求调
733659
鶴守丶葉七楼主2024/8/21 23:53

RT,WA on #9 #11 #12 #13

#include <bits/stdc++.h>
using namespace std;
int n;
double a[105][105];
const double eps = 1e-6;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n + 1; j++)
        {
            cin >> a[i][j];
        }
    }
    cout << fixed << setprecision(2);
    for (int i = 1; i <= n; i++)
    {
        int pla = i;
        while (pla <= n && a[pla][i] == 0)
        {
            pla++;
        }
        if (pla > n)
        {
            break;
        }
        for (int j = 1; j <= n + 1; j++)
        {
            swap(a[i][j], a[pla][j]);
        }
        double tmp = a[i][i];
        for (int j = 1; j <= n + 1; j++)
        {
            a[i][j] /= tmp;
        }
        for (int j = 1; j <= n; j++)
        {
            if (i == j)
            {
                continue;
            }
            tmp = a[j][i];
            for (int k = 1; k <= n + 1; k++)
            {
                a[j][k] -= tmp * a[i][k];
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        bool a0 = true;
        for (int j = i + 1; j <= n; ++j)
            if (abs(a[i][j]) >= eps) {
                a0 = false;
                break;
            }
        if (a0 && abs(a[i][i]) <= eps && abs(a[i][n + 1]) >= eps) {
            cout << "-1\n";
            return 0;
        }
    }
    for (int i = 1; i <= n; ++i) {
        bool a0 = true;
        for (int j = i + 1; j <= n; ++j)
            if (abs(a[i][j]) >= eps) {
                a0 = false;
                break;
            }
        if (!a0) {
            cout << "0\n";
            return 0;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        cout << 'x' << i << '=' << a[i][n + 1] << endl;
    }
    return 0;
}
2024/8/21 23:53
加载中...