C++ 算法题:8443 无限回转 - 枚举解法

本题要求判断是否存在正整数对 (x, y),满足 x * y = S 且 2 * (x + y) = P,并输出最小 x 的整数对。使用枚举法,遍历所有可能的 x 值,并计算相应的 y 值,判断是否满足条件。

题目描述

给定两个整数 S,P,问是否有正整数对 (x,y),使得 x×y=S 且 2×(x+y)=P

如果有,则输出 Yes,并在第二行输出满足 x 最小的两个整数,否则则输出 No

输入格式

第一行两个整数 S,P,中间用空格隔开

输出格式

第一行一个字符串 Yes 或 No ,表示是否有满足条件的整数对

如果第一行为 Yes ,则在第二行输出 x 最小的这整数对,中间用空格隔开。如果第一行为 No,则没有第二行内容:

代码实现

#include <iostream>
using namespace std;

int main() { int N, S, P; cin >> N >> S >> P;

bool found = false;
int x = 1, y = S;
while (x &lt;= y) {
    if (x * y == S &amp;&amp; 2 * (x + y) == P) {
        found = true;
        break;
    }
    x++;
    y = S / x;
}

if (found) {
    cout &lt;&lt; "Yes" &lt;&lt; endl;
    cout &lt;&lt; x &lt;&lt; " " &lt;&lt; y &lt;&lt; endl;
} else {
    cout &lt;&lt; "No" &lt;&lt; endl;
}

return 0;

}

C++ 算法题:8443 无限回转 - 枚举解法

原文地址: http://www.cveoy.top/t/topic/qeIJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录