分数之和
难度:初阶
时间限制:1000ms
内存限制:512mb
题目描述
求这样的四个自然数p,q,r,s(p<=q<=r<=s),使得以下等式成立:1/p+1/q+1/r+1/s=1,请输出所有满足条件的不重复的解。
输入格式
无
输出格式
分别输出p q r s,之间用一个空格符分开,一行一个解。
#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,如果满足,则输出这组解。由于题目中要求输出不重复的解,因此需要对这些解进行去重操作。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!