给定两个数a和b,在他们的因子里各找一个数c和d,使得c*d接近128且c和d尽量在[8,16之间]

给定两个数a和b,在他们的因子里各找一个数c和d,使得c*d接近128且c和d尽量在[8,16之间]

如a b分别为11,16,最终返回8,11

c或c++实现

该回答引用chatgpt:
c++

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int a = 11, b = 16;
    int min_diff = INT_MAX;
    int res_c = 0, res_d = 0;

    for (int c = 8; c <= 16; c++) {
        for (int d = 8; d <= 16; d++) {
            int prod = c * d;
            int diff = abs(prod - 128);
            if (diff < min_diff && a % c == 0 && b % d == 0) {
                min_diff = diff;
                res_c = c;
                res_d = d;
            }
        }
    }

    cout << res_c << " " << res_d << endl;

    return 0;
}


程序中,我们首先定义了两个数 a 和 b,然后用两个循环遍历所有可能的因子 c 和 d,使得它们的乘积最接近128。同时,我们要求 c 和 d 都在 [8, 16] 的范围内,并且它们是 a 和 b 的因子,即 a 和 c 整除,b 和 d 整除。如果找到了比当前最小差值更小的乘积差值,则更新最小差值和对应的因子值。最后输出找到的因子 c 和 d 即可。对于其他数值的 a 和 b,只需要将程序中的 a 和 b 更改为相应的数值即可。