【算法竞赛】:分数拆分

题目

输入正整数K,找到所有的正整数x>=y,使得1/k = 1/x+1/y
样例输入:
2
12
样例输出:
【算法竞赛】:分数拆分_第1张图片

思路:

对等式进行化简,然后得到K,x,y的一个关系式:
x = k*y/(y-k);
然后对y进行遍历,y肯定是大于k小于等于2*k,这个可以通过那个公式判断
然后遍历时候算出x,如果算出X为整数切X大于等于Y,则输出结果 = =

代码

// author:seen
/// 算法竞赛_分数拆分
#include <iostream>
using namespace std;
int main(){
    int k;
    while(cin>>k &&k){
        for(int y=k+1;y<=2*k;y++){
            float x= (float)k*y/(y-k);
            int temp =(int)x;  //判断X是否为整数的一个方法
            if(temp==x &&x>=y){
                cout<<k<<" "<<x<<" "<<y<<endl;
            }
        }
    }
}

运行截图:

注:算出来的那三列数分别对应K, x, y

你可能感兴趣的:(算法,X,分数拆分)