50分求调
查看原帖
50分求调
983841
Pluto_Dream_Sky楼主2025/2/1 20:50
#include<bits/stdc++.h>
using namespace std;
bool issq(int d){//是平方数 
	int r=sqrt(d);
	if(r*r==d) return 1;
	return 0;
}
int gcd(int a,int b){
	if(!b) return a;
	return gcd(b,a%b);
}

void solve1(int b,int ax2){//处理 -b/2a
	int gcdd=gcd(b,ax2);
	if((-b/gcdd)<0 && (ax2/gcdd)<0) b*=-1,ax2*=-1;
	if((-b/gcdd)%(ax2/gcdd)==0) cout<<(-b/gcdd)/(ax2/gcdd)<<'+';
	else cout<<-b/gcdd<<'/'<<ax2/gcdd<<'+';
	return;
} 
void solve2(int d,int ax2){//c化简根并处理 
	int k=1;
	for(int i=1;i*i<=d;i++) if(d%(i*i)==0) d/=i*i,k*=i;
	int gcdd=gcd(k,ax2);
	if((k/gcdd)<0 && (ax2/gcdd)<0) k*=-1,ax2*=-1;
	if(k/gcdd!=1) cout<<k/gcdd<<'*';
	cout<<"sqrt("<<d<<")";
	if(ax2/gcdd!=1) cout<<'/'<<ax2/gcdd;
	cout<<endl;
}
void func(int a,int b,int c){
	int d=b*b-4*a*c;
	if(d<0){//无实数根 
		cout<<"NO"<<endl;
		return;
	}
	if(issq(d)){//有理数 
		int sq=sqrt(d);
		int z=-b-sq,z1=-b+sq,m=2*a;
		double ans1=z/m,ans2=z1/m;
		if(ans1<ans2) z=z1;
		int gc=gcd(z,m);
		z/=gc,m/=gc;
		if(m<0) z=-z,m=-m;
		cout<<z;
		if(m!=1) cout<<'/'<<m;
		cout<<endl;
	}else{//吴礼庶 
		if(b) solve1(b,2*a);//处理 -b/2a 
		solve2(d,2*a);
	} 
} 
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t,M;
	cin>>t>>M;
	int a,b,c;
	while(t--){
		cin>>a>>b>>c;
		func(a,b,c);
	}
	return 0;
}
/*
a*x^2+b*x+c=0
*/

样例2、4、6、9、10 WA

2025/2/1 20:50
加载中...