求条 50pts
查看原帖
求条 50pts
941843
Jayant_xincheng楼主2024/10/7 10:37
#include<bits/stdc++.h>
#define ll long long
using namespace std;
// q1 = -b / 2a, q2 = sqrt(b * b - 4ac) / 2a; 
int gcd(int a, int b)
{
	return (b == 0 ? a : gcd(b, a % b));
}
int main()
{
	int t, m;
	cin >> t >> m;
	while(t --)
	{
		int a, b, c;
		cin >> a >> b >> c;
		int delta = b * b - 4 * a * c;
		if(delta < 0)
		{
			cout << "NO\n";
			continue;
		}
		else if(delta == 0)
		{
			if(-b % (2 * a) == 0)
				cout << -b / (2 * a) << "\n";
			else
			{
				int gc = gcd(abs(b), abs(2 * a));
				printf("%d/%d\n", -b / gc, (2 * a) / gc);
			}
		}
		else
		{
			if(sqrt(delta) == int(sqrt(delta)))
			{
				int r = sqrt(delta);
				if(a > 0)
				{
					if((-b + r) % (2 * a) == 0)
						cout << (-b + r) / (2 * a) << "\n";
					else
					{
						int gc = gcd(abs(-b + r), abs(2 * a));
						printf("%d/%d\n", (-b + r) / gc, (2 * a) / gc);
					}
				}
				if(a < 0)
				{
					if((-b - r) % (2 * a) == 0)
						cout << (-b - r) / (2 * a) << "\n";
					else
					{
						int gc = gcd(abs(-b - r), abs(2 * a));
						printf("%d/%d\n", (-b - r) / gc, (2 * a) / gc);
					}
				}
			}
			else
			{
				if(b != 0)
				{
					if(-b % (2 * a) == 0)
					cout << -b / (2 * a) ;
					else
					{
						int gc = gcd(abs(b), abs(2 * a));
						printf("%d/%d", -b / gc, (2 * a) / gc);
					}
				}
				if(b != 0)
					cout << "+";
				int cheng; 
				for(int j = 1; j <= sqrt(delta); j ++)
					if(delta % (j * j) == 0)
						cheng = j;
				int gc = gcd(cheng, 2 * a);
				if(cheng % (2 * a) == 0) cout << cheng / (2 * a) << "*";
				else if(cheng != 1 && cheng / gc != 1) cout << cheng / gc << "*";
				cout << "sqrt(" << delta / (cheng * cheng) << ")" ;
				if(cheng % (2 * a) != 0) cout << "/" << 2 * a / gc << "\n";
				else cout << "\n";
			}
		}
	}
	return 0;
}
2024/10/7 10:37
加载中...