ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

洛谷P9750 [CSP-J 2023] 一元二次方程一题的题解

洛谷P9750 [CSP-J 2023] 一元二次方程一题的题解 这是一道既简单又复杂的模拟题我们需要进行分类讨论再按题目要求处理。首先照着公式对b取反再用一个变量存分母2a然后求▲delta如果▲小于0就输出NO 反之就输出其较大的解的正确格式。求解时有两个重要的任务第一约分第二处理无理数。约分很好办用库函数找到分子和分母的最大公约数就行处理无理数也还好找到根号里数最大的可开方的约数把它提出来再和分母进行约分。但是有一些细节约分时要记得管正负号如果分母为一就只用输出分子分子为零不用输出。还有有理数和无理数中间要加符号。#includebits/stdc.husingnamespacestd;pairint,intgh(intd){intx0,y0;for(inti1;i*id;i){if(d%(i*i)0){xi;yd/(i*i);}}return{x,y};}voidfs(intp,intq){if(p0){cout0;return;}if(q0){q-q;p-p;}intg__gcd(abs(p),q);p/g;q/g;if(q1)coutp;elsecoutp/q;}voidgen(intdelta,intden){pairint,intcgh(delta);intcsc.first;intg__gcd(cs,abs(den));cs/g;den/g;if(cs1)coutsqrt(c.second);elsecoutcs*sqrt(c.second);if(abs(den)!1)cout/abs(den);coutendl;}voidprint1(intp,intq){fs(p,q);coutendl;}voidprint2(intp,intq){if(p0)return;fs(p,q);cout;}intmain(){intt,m;cintm;while(t--){inta,b,c;cinabc;b-b;intden2*a;intdeltab*b-4*a*c;booltp(den0);if(delta0)coutNOendl;elseif(delta0)print1(b,den);else{intsq(int)round(sqrt(delta));if(sq*sqdelta){intsum;sumb(tp?sq:-sq);print1(sum,den);}else{print2(b,den);//前半部分gen(delta,den);//后半部分}}}return0;}
返回列表