测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A35533. 一元二次方程(uqe)样例 1 输入9 10001 ‐1 0‐1 ‐1 ‐11 ‐2 11 5 44 4 11 0 ‐4321 ‐3 12 ‐4 11 7 1样例 1 输出1NO1‐1‐1/212*sqrt(3)3/2+sqrt(5)/21+sqrt(2)/2‐7/2+3*sqrt(5)/2

填空题 较难

题目描述

一元二次方程(uqe)

样例 1 输入

9 1000

1 ‐1 0

‐1 ‐1 ‐1

1 ‐2 1

1 5 4

4 4 1

1 0 ‐432

1 ‐3 1

2 ‐4 1

1 7 1

样例 1 输出

1

NO

1

‐1

‐1/2

12*sqrt(3)

3/2+sqrt(5)/2

1+sqrt(2)/2

‐7/2+3*sqrt(5)/2

参考答案

#include<bits/stdc++.h> using namespace std; int t, a, b, c, up; int main() { cin >> t >> up; while (t--) { cin >> a >> b >> c; int derta = b * b - 4 * a * c; if (derta < 0) { cout << "NO\n"; continue; } if ((int)sqrt(derta) * (int)sqrt(derta) == derta) { int z, m = 2 * a; if (a < 0) { z = -sqrt(derta) - b; } else { z = sqrt(derta) - b; } if (z > 0 && m < 0) { z = -z, m = -m; } if (z < 0 && m < 0) { z = -z, m = -m; } if (z % m == 0) { cout << z / m; } else { int g = __gcd(abs(m), abs(z)); cout << z / g << "/" << m / g; } } else { int uz = -b, um = 2 * a, z = derta; if (uz != 0) { if (uz > 0 && um < 0) { uz = -uz, um = -um; } if (uz < 0 && um < 0) { uz = -uz, um = -um; } if (uz % um == 0) { cout << uz / um; } else { int g = __gcd(abs(um), abs(uz)); cout << uz / g << "/" << um / g; } cout << "+"; } int q2 = 1; for (int i = sqrt(derta); i >= 2; i--) { if (z % (i * i) == 0) { q2 = i; z /= i * i; break; } } int g = __gcd(abs(a) * 2, q2); a = abs(a) * 2 / g, q2 /= g; if (q2 == 1 && a == 1) { cout << "sqrt(" << z << ")"; } else if (q2 == 1) { cout << "sqrt(" << z << ")/" << a; } else if (q2 % a == 0) { cout << q2 / a << "*sqrt(" << z << ")"; } else { cout << q2 << "*sqrt(" << z << ")/" << a; } } cout << "\n"; } return 0; }
上一题 下一题