复习了一下自主招生时学的行列式求解方程组,也就是克莱姆定则的应用。 /* ID: wangqia6 TASK: ratios LANG: C++ */ #include <fstream> using namespace std; const int N = 3; const int M = 4; long b[M],a[M][M],c[M][M]; long det(long a[][M]) { return a[1][1] * a[2][2] * a[3][3] + a[1][2] * a[2][3] * a[3][1] + a[1][3] * a[2][1] * a[3][2] - a[1][3] * a[2][2] * a[3][1] - a[1][2] * a[2][1] * a[3][3] - a[1][1] * a[2][3] * a[3][2]; } void matrix(int j) { int i; for (i = 1; i <= N; i++) c[i][j - 1] = a[i][j - 1]; for (i = 1; i <= N; i++) c[i][j] = b[i]; return; } long gcd(long a,long b) { if (b) return gcd(b,a % b); else return a; } int main() { ifstream cin ("ratios.in"); ofstream cout ("ratios.out"); int i,j; for (i = 1; i <= N; i++) cin >> b[i]; for (j = 1; j <= N; j++) for (i = 1; i <= N; i++) { cin >> a[i][j]; c[i][j] = a[i][j]; } long d[M]; d[0] = det(a); for (i = 1; i <= N; i++) { matrix(i); d[i] = det(c); } if ((!d[0]) || (d[1] / d[0] < 0) || (d[2] / d[0] < 0) || (d[2] / d[0] < 0)) { cout << "NONE" << endl; cin.close(); cout.close(); return 0; } long x; x = gcd(d[0],gcd(d[1],gcd(d[2],d[3]))); cout << d[1] / x << ' ' << d[2] / x << ' ' << d[3] / x << ' ' <<d[0] / x << endl; cin.close(); cout.close(); return 0; }