社区讨论

WA on#14 求助

P2455[SDOI2006] 线性方程组参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lvonahto
此快照首次捕获于
2024/05/02 10:46
2 年前
此快照最后确认于
2024/05/02 13:53
2 年前
查看原帖
CPP
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define init signed
#define int double
using namespace std;

init n;
int guass[105][105];

void check()
{
	bool hs = true, pf = false;
	for (init i = 1;i <= n; ++ i)
	{
		if (guass[i][i] == 0)
		{
			if (guass[i][n + 1] == 0)
			{
				pf = true;
			}
			else
			{
				hs = false;
			}
		}
	}
	if	(! hs)
	{
		cout << -1 << endl;
		exit(0);	
	}
	if (pf)
	{
		cout << 0 << endl;
		exit(0);	
	}
	return;
}

init main()
{
    ios::sync_with_stdio(false);
    cin.tie(0) , cout.tie(0);
    cin >> n;
    for (init i = 1;i <= n; ++ i)
    {
        for (init j = 1;j <= n + 1; ++ j)
        {
            cin >> guass[i][j];
        }
    }
    for (init i = 1;i <= n; ++ i)
    {
        init maxn_p;
        int maxn = 0;
        for (init j = i;j <= n; ++ j)
        {
            if (fabs(guass[j][i]) >= maxn)
            {
                maxn = fabs(guass[j][i]);
                maxn_p = j;
            }
        }
        for (init j = 1;j <= n + 1; ++ j)
        {
            swap(guass[maxn_p][j] , guass[i][j]);
        }
        if(guass[i][i] == 0)
        {
            continue;
        }
        for (init j = i + 1;j <= n + 1; ++ j)
        {
            guass[i][j] /= guass[i][i];
        }
        for (init j = i + 1;j <= n; ++ j)
        {
            int l = guass[j][i];
            for (init k = 1;k <= n + 1; ++ k)
            {
                guass[j][k] -= l * guass[i][k] ;
            }  
        }

    }
    for (init i = n - 1;i >= 1; -- i)
    {
        for (init j = i + 1;j <= n; ++ j)
        {
            guass[i][n + 1] -= guass[i][j] * guass[j][n + 1];
        }
    }
    check();
    for (init i = 1;i <= n; ++ i)
    {
        printf("x%d=%.2lf\n", i , guass[i][n + 1]);
    }
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...