主要意思:
很简单,就是这四个自然数的倒数之和等于1(1/p+1/q+1/r+1/s)
主要思路:
既然这四个自然数都不知道,就可以都枚举,需要4重循环
枚举就要确定对象,范围,条件:
①对象:p,q,r,s
②范围:p≤q≤r≤s(题目已知)
但我们在枚举p的时候,并不知道q取几
所以,我们要去算出p,q,r,s的范围
这4个是自然数所以是非负整数(整数和0)
因为除数不为0,所以这4个大于1
如果其中有一个数是1,那么其他数的倒数就得0,而题目中说不重复,所以这4个大于1
1.p最小取2,最大取4(因为当p=q=r=s时,各取4,满足条件);
2.q最小取p,最大取6(因为要保证q最大,那么1/q就小,1/p的值就大,所以p取2,1/p=1/2,1-1/2=1/2;当q=r=s时,1/2/3=1/6;各取4,满足条件)
3.r最小取q,最大取12(因为要保证r最大,那么1/r最小,1/p和1/q的值就大,所以p取2且q取,这里不知道取多少,那就在p的范围里找,不能取2,最大值就是3,1/p=1/2,1/q=1/3,1-1/2-1/3=1/6;当r=s时,1/6/2=1/12;各取12,满足条件)
4.s最小取r,最大取42(因为要保证s最大,那么1/s最小,1/p和1/q和1/r的值就大,所以p取2且q取,这里不知道取多少,那就在p的范围里找,不能取2,最大值就是3,r取-;这里不知道取多少,那就在q的范围里找,不能取6,值可以是7;1/p=1/2,1/q=1/3,1-1/2-1/3=1/6;1/6-1/7=1/42,满足条件)
③条件:1/p+1/q+1/r+1/s=1
题解:
#include <bits/stdc++.h>
int main(){
for(int p=2;p<=4;p++){
for(int q=p;q<=6;q++){
for(int r=q;r<=12;r++){
for(int s=r;s<=42;s++){
if(q*r*s+p*r*s+p*q*s+p*q*r==p*q*r*s){
cout<<p<<" "<<q<<" "<<r<<" "<<s<<endl;
}
}
}
}
}
return 0;
}