题目:给你一个数k,找到所有的正整数x>=y,使得1/k = 1/x + 1/y成立
分析:
这里的x,y乍一看没有范围,不知如何枚举,但仔细对已知条件进行变形就可以发现y<=2k,利用这个条件我们顺便再把x求出来就好了
#include<iostream>
using namespace std;
int a[100];
int b[100];
int main()
{
int k;
cin>>k;
int count=0;
for(int y=1;y<=2*k;y++)
{
if(y-k>0)
{
if((k*y)%(y-k)==0)
{
int x=(k*y)/(y-k);
if(x>=y)
{
a[count]=x;
b[count]=y;//记录x,y的值,因为此时不能输出,要输入count先
count++;
}
}
}
}
cout<<count<<endl;
for(int i=0;i<count;i++)
{
cout<<"1/"<<k<<"="<<"1/"<<a[i]<<"+1/"<<b[i]<<endl;
}
return 0;
}
结果如图:
注意:对于暴力求解问题,对问题进行一定的分析往往会使得算法更加的简便