社区讨论
10pts
P9750[CSP-J 2023] 一元二次方程参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m0f6ivti
- 此快照首次捕获于
- 2024/08/29 19:06 2 年前
- 此快照最后确认于
- 2024/08/29 21:55 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c;
bool cf(int n){int y=sqrt(n);return n==y*y;}
int fj(int n){
int ans=1;
for(int i=sqrt(n);i>=1;i--){
if(n%(i*i)==0){
ans=i;
break;
}
}
return ans;
}
int main( ){
cin>>t>>m;
while(t--){
cin>>a>>b>>c;
int dert=b*b-4*a*c;
if(dert<0){
cout<<"NO"<<endl;
continue;
}
if(cf(dert)){
int fz=0-b+sqrt(dert),fm=2*a;
int k=__gcd(fz,fm);
fz/=k;
fm/=k;
if(fz<0||fm<0){
if(fz<0&&fm<0){
fz=abs(fz);
fm=abs(fm);
if(fm==1){
cout<<fz<<endl;
}
else{
printf("%d/%d",fz,fm);
cout<<endl;
}
}
else{
fz=abs(fz);
fm=abs(fm);
if(fm==1){
cout<<'-'<<fz<<endl;
}
else{
printf("-%d/%d",fz,fm);
cout<<endl;
}
}
}
else{
if(fm==1){
cout<<fz<<endl;
}
else{
printf("%d/%d",fz,fm);
cout<<endl;
}
}
}
else{
//无理数dert=bb-4ac;
int nc=b*b-4*a*c;
int w=fj(nc);
int nl=nc/(w*w);
int fz=w,fm=2*a;
int k=__gcd(fz,fm);
fz/=k;
fm/=k;
int fz_q=0-b,fm_q=2*a;
int k_q=__gcd(fz_q,fm_q);
fz_q/=k_q;
fm_q/=k_q;
if(fz_q<0||fm_q<0){
if(fz_q<0&&fm_q<0){
fz_q=abs(fz_q);
fm_q=abs(fm_q);
if(fm_q==1){
if(fz_q==0){
goto g;
}
cout<<fz_q<<'+';
}
else{
if(fz_q==0){
goto g;
}
printf("%d/%d+",fz_q,fm_q);
}
}
else{
fz_q=abs(fz_q);
fm_q=abs(fm_q);
if(fm_q==1){
if(fz_q==0){
goto g;
}
cout<<'-'<<fz_q<<'+';
}
else{
if(fz_q==0){
goto g;
}
printf("-%d/%d+",fz_q,fm_q);
}
}
}
else{
if(fm_q==1){
if(fz_q==0){
goto g;
}
cout<<fz<<'+';
}
else{
if(fz_q==0){
goto g;
}
printf("%d/%d+",fz_q,fm_q);
}
}
//先输出前半部分,以下为后半段
g:
if(fz<0||fm<0){
if(fz<0&&fm<0){
fz=abs(fz);
fm=abs(fm);
if(fm==1){
if(fz==1){
printf("sqrt(%d)",nl);
cout<<endl;
continue;
}
printf("%d*sqrt(%d)",fz,nl);
cout<<endl;
}
else{
if(fz==1){
printf("sqrt(%d)/%d",nl,fm);
cout<<endl;
continue;
}
printf("%d*sqrt(%d)/%d",fz,nl,fm);
cout<<endl;
}
}
else{
fz=abs(fz);
fm=abs(fm);
if(fm==1){
printf("-%d*sqrt(%d)",fz,nl);
cout<<endl;
}
else{
printf("-%d*sqrt(%d)/%d",fz,nl,fm);
cout<<endl;
}
}
}
else{
if(fm==1){
if(fz==1){
printf("sqrt(%d)",nl);
cout<<endl;
continue;
}
printf("%d*sqrt(%d)",fz,nl);
cout<<endl;
}
else{
if(fz==1){
printf("sqrt(%d)/%d",nl,fm);
cout<<endl;
continue;
}
printf("%d*sqrt(%d)/%d",fz,nl,fm);
cout<<endl;
}
}
}
}
}
RT,10pts求调
回复
共 0 条回复,欢迎继续交流。
正在加载回复...