// 约旦消元相比朴素高斯消元,代码量少,而且都能判无解,无穷解,唯一解;无穷解是代码中判,结束后如果a[i][i]==0&&a[i][n+]!=0无解,否则唯一解
1 #include
2 using namespace std;
3
4 int main()
5 {
6 int n;
7 scanf("%d",&n);
8 double a[105][105];
9 memset(a,0,sizeof(a));
10 for(int i=1;i<=n;i++)
11 for(int j=1;j<=n+1;j++)
12 {
13 int t;
14 scanf("%d",&t);
15 a[i][j]=t;
16 }
17 /*for(int i=1;i<=n;i++)
18 {
19 for(int j=1;j<=n+1;j++)cout<20 cout<21 }*/
22 for(int i=1;i<=n;i++)
23 {
24 if(!a[i][i])
25 {
26 for(int j=i+1;j<=n;j++)
27 if(a[j][i])
28 {
29 for(int k=1;k<=n+1;k++)swap(a[i][k],a[j][k]);
30 break;
31 }
32 }
33 for(int j=i+1;j<=n;j++)
34 {
35 double t=a[j][i]/a[i][i];
36 for(int k=1;k<=n+1;k++)
37 a[j][k]=a[j][k]-a[i][k]*t;
38 }
39 }
40
41
42 bool ok=false;
43 if(a[n][n]==0&&a[n+1][n+1]==0)ok=true;
44 if(ok)printf("No Solution\n");
45 else
46 {
47 for(int i=n;i;i--)
48 {
49 for(int j=n;j>=i+1;j--)
50 {
51 a[i][j]*=a[j][n+1];
52 a[i][n+1]-=a[i][j];
53 }
54 a[i][n+1]/=a[i][i];
55 }
56 for(int i=1;i<=n;i++)
57 printf("%.2lf\n",a[i][n+1]);
58 }
59
60 return 0;
61 }
1 #include
2 using namespace std;
3
4 int main()
5 {
6 int n;
7 scanf("%d",&n);
8 double a[105][105];
9 memset(a,0,sizeof(a));
10 for(int i=1;i<=n;i++)
11 for(int j=1;j<=n+1;j++)scanf("%lf",&a[i][j]);
12
13 for(int i=1;i<=n;i++)
14 {
15 if(!a[i][i])
16 {
17 bool ok=false;
18 for(int j=i+1;j<=n;j++)
19 if(a[j][i])
20 {
21 for(int k=1;k<=n+1;k++)swap(a[i][k],a[j][k]);
22 ok=true;
23 break;
24 }
25 if(!ok)
26 {
27 puts("No Solution");
28 return 0;
29 }
30
31 }
32 for(int j=1;j<=n;j++)
33 {
34 if(j==i)continue;
35 double t=a[j][i]/a[i][i];
36 for(int k=1;k<=n+1;k++)
37 a[j][k]=a[j][k]-a[i][k]*t;
38 }
39 }
40
41
42 for(int i=1;i<=n;i++)
43 printf("%.2lf\n",a[i][n+1]/a[i][i]);
44
45 return 0;
46 }