10分求调
查看原帖
10分求调
677489
Aaron530楼主2024/10/24 17:49
#include <bits/stdc++.h>
using namespace std;
int T,M;
int a,b,c;
int gcd(int x,int y)
{
	while(y)
	{
		int t=y;
		y=x%y;
		a=t;
	}
	return a;
}
int sq(int x)
{
	for(int i=int(sqrt(x));i>=0;i--)
		if(x%(i*i)==0)
			return i;
}
void printy(int z,int m)
{
	int gcdzm=gcd(z,m);
	int z1=z/gcdzm,m1=m/gcdzm;
	if(m1<0)
		m1*=-1,z1*=-1;
	double s=1.0*z1/m1;
	if(s!=floor(1.0*z1/m1))
		cout<<z1<<"/"<<m1;
	else
		cout<<int(s);
}
bool ifzheng(int z,int m)
{
	double s=1.0*z/m;
	if(s==floor(1.0*z/m))
		return true;
	return false;
}
int main()
{
	cin>>T>>M;
	while(T--)
	{
		cin>>a>>b>>c;
		int del=b*b-4*a*c;
		if(del<0)
		{
			cout<<"NO"<<endl;
			continue;
		}
		int t=sqrt(del);
		if(t*t!=del)
		{
			int q1z,q1m,q2z,q2m,r;
			q1z=-b,q1m=q2m=2*a;
			q2z=sq(del);
			r=del/(q2z*q2z);
			if(q1z!=0)
				printy(q1z,q1m),cout<<"+";
			if(1.0*q2z/q2m==1.0)
				cout<<"sqrt("<<r<<")"<<endl;
			else if(ifzheng(q2z,q2m)==true)
				printy(q2z,q2m),cout<<"*sqrt("<<r<<")"<<endl;
			else if(ifzheng(q2m,q2z)==true)
				cout<<"sqrt("<<r<<")/",printy(q2m,q2z),cout<<endl;
			else
			{
				int gcdzm=gcd(q2z,q2m);
				int z1=q2z/gcdzm,m1=q2m/gcdzm;
				cout<<z1<<"*sqrt("<<r<<")/"<<m1<<endl;
			}
		}
		else
		{
			int xz=-b+t,xm=2*a;
			printy(xz,xm),cout<<endl;
		}
	}
	return 0;
}

只对了第一个点

2024/10/24 17:49
加载中...