1 条题解
-
0
Guest
-
1
首先,输入中的
M
没有任何用,可以直接%*d
跳过然后分类讨论,先讨论Δ,Δ<0直接输出
NO
接下来讨论Δ是否为完全平方数,如果是完全平方数那么解就是一个有理数,直接输出
最后讨论无理解,b为0时则为sqrt(Δ)/a,非零则直接暴力输出
下面是代码
#include <bits/stdc++.h> using namespace std; void print(int fz,int fm){//输出一个有理数 int g=abs(__gcd(fz, fm));//不想写gcd直接用__gcd fz/=g,fm/=g; if(fm==1) printf("%d",fz); else printf("%d/%d",fz,fm); } int main(){ freopen("uqe.in","r",stdin); freopen("uqe.out","w",stdout); int t; scanf("%d%*d",&t);//%*d表示空一个不读取 while(t--){ int a,b,c; cin>>a>>b>>c; int delta=b*b-4*a*c;//Δ if(delta<0) cout<<"NO";//Δ<0 else{ int x=0; for(int i=1;i*i<=delta;i++) if(delta%(i*i)==0) x=i;//判断Δ是否为完全平方 if(x*x==delta){ int fz,fm; if(a>0) fz=-b+x,fm=2*a; else fz=b+x,fm=-2*a; print(fz,fm); } else{ int fz,fm; if(a>0) fz=-b,fm=2*a; else fz=b,fm=-2*a; if(fz!=0){ print(fz, fm); cout<<"+"; }//先输出前一个分数 int r=delta/(x*x); if(a>0) fz=x,fm=2*a; else fz=x,fm=-2*a; int g=__gcd(fz,fm); fz/=g,fm/=g; if(fm==1){ if(fz==1) printf("sqrt(%d)",r); else printf("%d*sqrt(%d)",fz,r); } else if(fz==1) printf("sqrt(%d)/%d",r,fm); else printf("%d*sqrt(%d)/%d",fz,r,fm);//上面一堆都是暴力输出 } } cout<<endl;//别忘换行 } return 0; }
信息
- ID
- 225
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者