cogs 721. [SDOI2007] 线性方程组
2024-08-30 00:54:09
721. [SDOI2007] 线性方程组
★★ 输入文件:gaess.in
输出文件:gaess.out
简单对比
时间限制:1 s 内存限制:128 MB
- 【问题描述】
- 已知 n 元线性一次方程组。
a1,1x1+a1,2x2+…+a1,nxn=b1
a2,1x1+a2,2x2+…+a2,nxn=b2
………………
an,1x1+an,2x2+…+an,nxn=bn
其中: n<=50.系数是整数,绝对值<=100 , bi的值都是正整数且<300。
编程任务:
根据输入的数据,编程输出方程组的解的情况。
【输入】(gaess.in)
第一行,未知数的个数。以下n行n+1列:分别表示每一格方程的系数及方程右边的值。
n
a1,1a1,2…a1,nb1
a2,1a2,2…a2,nb2
…………
an,1an,2…an,nbn
【输出】(gaess.out)
如果方程组无实数解输出−1 ;
如果有无穷多实数解,输出 0 ;
如果有唯一解,则输出解(小数点后保留两位小数,如果解是0,则不保留小数)
【样例输入】
3
2 -1 1 1
4 1 -1 5
1 1 1 0
【样例输出】
x1=1.00
x2=0
x3=-1.00
2017/03/22新加3组数据 by rapiz
/*高斯消元求解线性方程组*/
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
#define N 100
#define eps (1e-8)
int n;double a[N][N];
int main(){
freopen("gaess.in", "r", stdin);
freopen("gaess.out", "w", stdout);
//freopen("cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++)for(int j=;j<=n+;j++)scanf("%lf",&a[i][j]);
for(int i=;i<=n;i++){
int p=i;
for(int j=i+;j<=n;j++)if(fabs(a[j][i])>fabs(a[p][i]))p=j;
for(int j=;j<=n+;j++)swap(a[p][j],a[i][j]);
if(fabs(a[i][i])<eps)continue;
double tmp=a[i][i];
for(int j=;j<=n+;j++)a[i][j]/=tmp;
for(int j=;j<=n;j++)
if(i!=j){
double tmp=a[j][i];
for(int k=;k<=n+;k++)a[j][k]-=a[i][k]*tmp;
}
}
int imp=,ult=;
for(int i=;i<=n;i++){
int j=;
while(fabs(a[i][j])<eps&&j<=n+)j++;
if(j>n+)ult=;
else if(j==n+)imp=;
}
if(imp){printf("-1");return ;}
if(ult){printf("");return ;}
for(int i=;i<=n;i++){
if(fabs(a[i][n+])<eps)printf("x%d=0\n",i);
else printf("x%d=%.2lf\n",i,a[i][n+]);
}
}
最新文章
- 第9章 Shell基础(2)_Bash基本功能
- MongoDB JAVA API Filters
- mysql 5.6到percona 5.6小版本升级
- Vi的基本使用方法
- vim全局替换
- Android传感器的使用(GravieySensor)
- 安全:加固你的ssh 登录
- Apache-rhel5.8环境下编译安装
- Bitmap 与ImageSource之间的转换
- zookeeper入门知识
- synchronized关键字
- iOS中 喷枪打字动画的实现
- Android 动态设置TextView的drawableLeft等属性
- job定时任务
- 【转】Java并发编程:同步容器
- 直播框架ijkplayer
- docker-compose 手工指定容器IP
- doris 0.9.0版本docker镜像制作与使用
- 货车运输(最大生成树+倍增LCA)
- codeforces776D The Door Problem