【算法竞赛】:分数拆分

来源:互联网 发布:钉钉办公软件优缺点 编辑:程序博客网 时间:2024/05/20 11:33

题目

输入正整数K,找到所有的正整数x>=y,使得1/k = 1/x+1/y
样例输入:
2
12
样例输出:
这里写图片描述

思路:

对等式进行化简,然后得到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

0 0
原创粉丝点击