分数之和(C++、C语言)

分数之和
难度:初阶
时间限制:1000ms
内存限制:512mb
题目描述
求这样的四个自然数p,q,r,s(p<=q<=r<=s),使得以下等式成立:1/p+1/q+1/r+1/s=1,请输出所有满足条件的不重复的解。
输入格式

输出格式
分别输出p q r s,之间用一个空格符分开,一行一个解。

img

img


#include <stdio.h>
int main(void)
{
    int p,q,r,s,count = 0;

    for(p = 2;p < 5;p++)
    {
        for(q = p;q < 7;q++)
        {
            for(r = q;r < 13;r++)
            {
                if(0 != (p*q*r - q*r - p*r - p*q))
                {
                    s = (p*q*r)/(p*q*r - q*r - p*r - p*q);
                    if(!((p*q*r)%(p*q*r - q*r - p*r - p*q))&&s >= r)
                    {
                        printf("%d %d %d %d\n",p,q,r,s);
                    }
                }
            }
        }
    }
    return 0;
}


就是四个数相乘的结果,等于任意三个数相乘之和

O(n^4):四个for循环
O(n^3):https://leetcode.cn/problems/4sum/

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这道题目可以使用穷举法来解决,因为题目给定了四个自然数 p, q, r, s 的取值范围,所以我们可以用四重循环来枚举所有可能的解。

具体来说,我们可以从小到大枚举 p,然后在 p 的基础上从小到大枚举 q,再在 q 的基础上从小到大枚举 r,最后在 r 的基础上从小到大枚举 s。在每个循环中,我们判断当前的四个数是否满足等式 1/p+1/q+1/r+1/s=1,如果满足,则输出这组解。

下面是一份 Python 代码实现:

for p in range(1, 100):
    for q in range(p, 100):
        for r in range(q, 100):
            for s in range(r, 100):
                if 1/p + 1/q + 1/r + 1/s == 1:
                    print(p, q, r, s)

这段代码会枚举所有 p, q, r, s 的取值,然后依次判断是否满足等式 1/p+1/q+1/r+1/s=1,如果满足,则输出这组解。由于题目中要求输出不重复的解,因此需要对这些解进行去重操作。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^