刷清橙OJ--A1083.解线性方程组

来源:互联网 发布:java 方法区 内存溢出 编辑:程序博客网 时间:2024/05/22 10:26
问题:
A1083. 解线性方程组
时间限制:1.0s   内存限制:512.0MB  
总提交次数:2922   AC次数:609   平均分:53.62
问题描述
  给定线性方程组:
Ax=b
  请给出它的解。
  其中A是一个n*n的可逆矩阵,表示方程组的系数,b是一个给定的列向量,x是所求的列向量。
  你可以在你的代数与几何书中找到一些关于这个线性方程组的解法,其中高斯消元法是一种比较容易编程的方法。
输入格式
  输入的第一行包含一个正整数n,n不大于10。
  接下来n行,每行n个实数,表示A矩阵。
  接下来n行,每行一个实数,表示b向量。
输出格式
  输出n行,每行一个实数,四舍五入保留两位小数,表示你求得的向量x。
样例输入
2
1.0 0.0
0.0 1.0
3.0
5.0
样例输出
3.00
5.00
样例输入
2
1.0 1.0
1.0 -1.0
100.0
60.0
样例输出
80.00
20.00
代码:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> using namespace std; double a[15][15],x[15]; int main() {      int i=0,j=0,r=0,n=0;      scanf("%d",&n);      for(i=1; i<=n; i++)          for(j=1; j<=n; j++)              scanf("%lf", &a[i][j]);      for (int i=1; i<=n; i++)          scanf("%lf", &a[i][n+1]);      int k=1;      while(k<=(n-1))      {          double max=-1;          for(i=k; i<=n; i++)              if(fabs(a[i][k])>max)              {                  max=a[i][k];                  r=i;              }          for(j=1; j<=n+1; j++)          {              double p=a[k][j];              a[k][j]=a[r][j];              a[r][j]=p;          }          for(i=k+1; i<=n; i++)              for(j=k+1; j<=n+1; j++)                   a[i][j]-=a[i][k]* a[k][j]/ a[k][k];           k++;      }      double sum=0;      x[n]=(a[n][n+1])/(a[n][n]);      for(k=n-1;k>=1;k--)      {          for(j=k+1;j<=n;j++)              sum+=(a[k][j])*(x[j]);          x[k]=(a[k][n+1]-sum)/(a[k][k]);          sum=0;      }      for(i=1;i<=n;i++)          printf("%.2lf\n",x[i]+0.00000001);      return 0;  }
个人想法:代码来自试题讨论

原创粉丝点击