Description 賈老二是個(gè)品學(xué)兼優(yōu)的好學(xué)生,但由于智商問題,算術(shù)學(xué)得不是很好,尤其是在解方程這個(gè)方面。雖然他解決 2x=2 這樣的方程游刃有余,但是對(duì)于 {x+y=3 x-y=1} 這樣的方程組就束手無策了。于是他要你來幫忙。前提是一次方程組且保證在integer的范圍內(nèi)可以處理所有問題。 Input 第一行一個(gè)數(shù)字N(1≤N≤100)表示要求的未知數(shù)的個(gè)數(shù),同時(shí)也是所給的方程個(gè)數(shù)。 第2到N+1行,每行N+1個(gè)數(shù)。前N個(gè)表示第1到N個(gè)未知數(shù)的系數(shù)。第N+1個(gè)數(shù)表示N個(gè)未知數(shù)乘以各自系數(shù)后的加和。(保證有唯一整數(shù)解) Output 一行N個(gè)數(shù),表示第1到N個(gè)未知數(shù)的值。 Sample Input 2 1 1 3 1 -1 1 Sample Output 2 1
高斯消元
#include <cstdio>#include <algorithm>#include <cstdio>#include <cmath>#include <cstring>#define MAXN 105using namespace std;int n,m;double a[MAXN][MAXN];const double eps=1e-8;void PRint(){ for(int i=1;i<=n;i++) { for(int j=1;j<=n+1;j++) printf("%lf ",a[i][j]); printf("/n"); } printf("----/n");}bool gaosi(){ int i=1,to;double t;//now為當(dāng)前處理的行數(shù) for(int i=1;i<=n;i++) //消去并回代Xi { for(to=i;to<=n;to++) if(fabs(a[to][i])>eps) break;//找到Xi系數(shù)非0的一行 if(to>n) continue;//Xi系數(shù)全為0 if(to!=i)for(int j=1;j<=n+1;j++) swap(a[to][j],a[i][j]);//交換 t=a[i][i]; for(int j=1;j<=n+1;j++) a[i][j]/=t;//將Xi行所有的系數(shù)變?yōu)? for(int j=1;j<=n;j++)//j為1到n 回代與消去同時(shí)進(jìn)行 { if(j==i) continue; t=a[j][i];//倍數(shù) for(int k=1;k<=n+1;k++) a[j][k]-=t*a[i][k]; } } //print(); /*for(int i=now;i<=n;i++) if(fabs(a[i][n+1])>eps) return 0;//出現(xiàn) 0=常數(shù) 的情況無解 return 1;//有解*/}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) scanf("%lf",&a[i][j]); gaosi(); for(int i=1;i<=n;i++) if(i==n) printf("%d/n",int(a[i][n+1]+0.5)); else printf("%d ",int(a[i][n+1]+0.5)); return 0;}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注