龙空技术网

历年CSP-J复赛真题解析 | 2022年T2解密

热爱编程的通信人 88

前言:

目前各位老铁们对“csp题解2022”都比较珍视,大家都想要剖析一些“csp题解2022”的相关知识。那么小编也在网络上汇集了一些关于“csp题解2022””的相关资讯,希望兄弟们能喜欢,你们一起来学习一下吧!

学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:历年CSP-J复赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客

【题目描述】

给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni,ei,di,求两个正整数 pi,qi,使 ni=pi×qi、ei×di=(pi−1)(qi−1)+1。

【输入】

第一行一个正整数 k,表示有 k 次询问。

接下来 k 行,第 i 行三个正整数 ni,di,ei。

【输出】

输出 k 行,每行两个正整数 pi,qi 表示答案。

为使输出统一,你应当保证 pi≤qi。

如果无解,请输出 NO。

【输入样例】

10770 77 5633 1 211545 1 499683 3 227858 3 257723 37 13572 26 11867 17 17829 3 263528 4 109

【输出样例】

2 385NONONO11 783 2412 286NONO6 88

【代码详解】

#include <bits/stdc++.h>#include <cmath>using namespace std;typedef long long LL;int k;  //定义正整数kLL n, d, e;  //定义n、d、eint main(){    cin >> k;  //输入k    while (k--) {  //循环k次        cin >> n >> d >> e;  //输入n、d、e        LL m = n-e*d+2;  //根据数学推导,计算m        LL r = sqrt(m*m-4*n);  //根据数学推导,计算m*m-4*n的平方根        if (r*r==m*m-4*n) { //因为p和q是正整数,所以这里判断是否为完全平方根            cout << (m-r)/2 << " " << (m+r)/2 << endl;  //计算p和q        } else {            cout << "NO" << endl;  //否则输出NO        }    }    return 0;}

【运行结果】

10770 77 52 385633 1 211NO545 1 499NO683 3 227NO858 3 25711 78723 37 133 241572 26 112 286867 17 17NO829 3 263NO528 4 1096 88

标签: #csp题解2022 #计算机二级c语言题库及答案2022年