VIJOS 1052贾老二算算术 (高斯消元)
生活随笔
收集整理的這篇文章主要介紹了
VIJOS 1052贾老二算算术 (高斯消元)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
描述
賈老二是個品學兼優(yōu)的好學生,但由于智商問題,算術學得不是很好,尤其是在解方程這個方面。雖然他解決 2x=2 這樣的方程游刃有余,但是對于 {x+y=3 x-y=1} 這樣的方程組就束手無策了。于是他要你來幫忙。前提是一次方程組且保證在integer的范圍內(nèi)可以處理所有問題。
格式
輸入格式
第一行一個數(shù)字N(1≤N≤100)表示要求的未知數(shù)的個數(shù),同時也是所給的方程個數(shù)。
第2到N+1行,每行N+1個數(shù)。前N個表示第1到N個未知數(shù)的系數(shù)。第N+1個數(shù)表示N個未知數(shù)乘以各自系數(shù)后的加和。(保證有唯一整數(shù)解)
輸出格式
一行N個數(shù),表示第1到N個未知數(shù)的值。
?
模板題!
1 #include<algorithm> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<iostream> 6 double a[2005][2005]; 7 int n; 8 int gcd(int a,int b){ 9 if (b==0) return a; 10 else return gcd(b,a%b); 11 } 12 void gauss(){ 13 int now=1,to,ggcd; 14 double t; 15 for (int i=1;i<=n;i++){ 16 for (to=now;to<=n;to++) if (a[to][i]!=0) break; 17 if (to>n) continue; 18 if (to!=now) for (int j=1;j<=n+1;j++) std::swap(a[to][j],a[now][j]); 19 t=a[now][i]; 20 for (int j=1;j<=n+1;j++) a[now][j]/=t; 21 for (int j=1;j<=n;j++) 22 if (j!=now){ 23 t=a[j][i]; 24 for (int k=1;k<=n+1;k++) 25 a[j][k]-=t*a[now][k]; 26 } 27 now++; 28 } 29 } 30 int main(){ 31 scanf("%d",&n); 32 for (int i=1;i<=n;i++){ 33 for (int j=1;j<=n+1;j++) 34 scanf("%lf",&a[i][j]); 35 } 36 gauss(); 37 for (int i=1;i<=n;i++) 38 printf("%d ",(int)round(a[i][n+1])); 39 }?
轉載于:https://www.cnblogs.com/qzqzgfy/p/5543948.html
總結
以上是生活随笔為你收集整理的VIJOS 1052贾老二算算术 (高斯消元)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运维利器:万能的 strace
- 下一篇: 冲刺第二阶段第八天