50分求调
  • 板块学术版
  • 楼主Leave_Childhood
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/9/14 20:38
  • 上次更新2024/9/14 22:31:03
查看原帖
50分求调
1035525
Leave_Childhood楼主2024/9/14 20:38

一元二次方程

#include<bits/stdc++.h>

using namespace std;

int t,m;

int a,b,c;

bool check(int x)

{

	int a1=ceil(sqrt(x)),a2=sqrt(x);

	if(a1==a2)return true;

	return false;

}

bool check2(int x,int y)

{

    if(x==0)return true;

	if(abs(x)<abs(y))return false;

	if(abs(x)%abs(y)==0)return true;

	return false;

}

int writex(int x,int y)

{

	int a3=x,b3=y,c3=abs(__gcd(a3,b3));

	x/=c3;

	y/=c3;

	if(y<0)x*=(-1),y*=(-1);

	return x;

}

int writey(int x,int y)

{

	int a4=x,b4=y,c4=abs(__gcd(a4,b4));

	x/=c4;

	y/=c4;

	if(y<0)x*=(-1),y*=(-1);

	return y;

}

void deal(int a,int b,int c,int td)

{

	int q2=1,r=td;

	for(int i=2;abs(i*i)<=abs(r);)

	{

		if(r%(i*i)==0)q2*=i,r/=(i*i);

		else i++;

	}

	if(double(q2)/(2*a)==1)cout<<"sqrt("<<r<<")"<<endl;

	else if(q2%(2*a)==0)cout<<abs(q2/(a*2))<<"*sqrt("<<r<<")"<<endl;

	else if((2*a)%(q2)==0)cout<<"sqrt("<<r<<")/"<<abs(2*a/q2)<<endl;

	else cout<<abs(writex(q2,2*a))<<"*sqrt("<<r<<")/"<<abs(writey(q2,2*a))<<endl;

}

int jie(int a,int b,int dt)

{

	int a1=-b+sqrt(dt);

	int a2=-b-sqrt(dt);

	int a3=max(a1/(2*a),a2/(2*a));

	if(a1/(2*a)==a3)return a1;

	if(a2/(2*a)==a3)return a2;

}

int main()

{

	cin>>t>>m;

	for(int i=1;i<=t;i++)

	{

		cin>>a>>b>>c;

		int dt=b*b-4*a*c;

		int d=jie(a,b,dt);

		if(dt<0)

		{

		cout<<"NO\n";

	    continue;

		}

		if(check(dt))

		{

			if(check2(d,2*a))cout<<d/(2*a)<<endl;

			else cout<<writex(d,2*a)<<"/"<<writey(d,2*a)<<endl;

			continue;

		}

		if((-b)/2!=0)

		{

			if(check2(-b,2*a))cout<<-b/(2*a)<<"+";

			else cout<<writex(-b,2*a)<<"/"<<writey(-b,2*a)<<"+";

		}

		deal(a,b,c,dt);

	}

    return 0;

}
2024/9/14 20:38
加载中...