武汉市网站建设_网站建设公司_全栈开发者_seo优化
2026/1/19 17:15:48 网站建设 项目流程

题目描述

已知 n 元线性一次方程组。

⎩⎨⎧​a1,1​x1​+a1,2​x2​+⋯+a1,n​xn​=b1​a2,1​x1​+a2,2​x2​+⋯+a2,n​xn​=b2​⋯an,1​x1​+an,2​x2​+⋯+an,n​xn​=bn​​

请根据输入的数据,编程输出方程组的解的情况。

输入格式

第一行输入未知数的个数 n。
接下来 n 行,每行 n+1 个整数,表示每一个方程的系数及方程右边的值。

输出格式

如果有唯一解,则输出解。你的结果被认为正确,当且仅当对于每一个 xi​ 而言结果值与标准答案值的绝对误差或者相对误差不超过 0.01。

如果方程组无解输出 −1; 如果有无穷多实数解,输出 0;

输入输出样例

输入 #1复制

3 2 -1 1 1 4 1 -1 5 1 1 1 0

输出 #1复制

x1=1.00 x2=0.00 x3=-1.00

说明/提示

【数据范围】
对于 100% 的数据,1≤n≤50。∀1≤i,j≤n,有 ∣ai,j​∣≤100,∣bi​∣≤300。

代码实现:

#include <iostream> #include <algorithm> #include<cmath> #include<cstring> #include<cstdio> #include<cstdlib> #include<vector> #include<iomanip> #define sq(x)(x)*(x) #define f1(i,n) for (i=1;i<=n;i++) #define f0(i,n) for (i=0;i<n;i++) #define fr(i,x,y) for (i=x;i<=y;i++) #define fb(i,y,x) for (i=y;i>=x;i--) using namespace std; double mat[55][55], res[55]; int n, i, j, k; bool flag1=0, flag2=0; int main() { scanf("%d",&n); f1(i,n) { f1(j,n+1) { scanf("%lf",&mat[i][j]); } } int col=1; f1(i,n) { if (col>n) break; fr(j,i,n) { if (abs(mat[j][col])>abs(mat[i][col])) { f1(k,n+1) swap(mat[i][k], mat[j][k]); } } if (abs(mat[i][col])<1e-8) { flag2=1; col++; i--; continue; } fr(j,i+1,n) { double t=mat[j][col]/mat[i][col]; fr(k,col,n+1) { mat[j][k]-=mat[i][k]*t; } } col++; } col=n; fb(i,n,1) { if (col<1) break; if (abs(mat[i][col])<1e-8) continue; f1(j,i-1) { double t=mat[j][col]/mat[i][col]; fr(k,col,n+1) { mat[j][k]-=mat[i][k]*t; } } col--; if (abs(mat[i][col])>1e-8) i++; } fb(i,n,1) { flag1=0; f1(j,n) if (abs(mat[i][j])>1e-8) flag1=1; if (flag1==0 && abs(mat[i][n+1])>1e-8) { puts("-1"); return 0; } if (abs(mat[i][i])>1e-8 && !flag2) res[i]=mat[i][n+1]/mat[i][i]; } if (flag2==1) { puts("0"); return 0; } f1(i,n) { if (abs(res[i])<5e-3) printf("x%d=0\n",i); else printf("x%d=%.2f\n",i,res[i]); } return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询