例题7-3 UVA10976 Fraction Again(16行AC代码)

紫书刷题进行中,题解系列【GitHub|CSDN

例题7-3 UVA10976 Fraction Again(16行AC代码)

题目大意

给定正整数k,求1/k=1/x+1/y,x>=y的所有解,若存在多解,x大者在前

思路分析

简单的二元一次方程求解,枚举x或y,即可求出对方值。关键在于如何确定枚举范围,根据题目条件,可进行如下公式推导,得到y的枚举区间:(k,2k]

根据题意可知 x>=y>0  => 1/x<=1/y (不等式1)
已知:1/k=1/x+1/y (等式1)
根据等式1推导出 x=(yk)/(y-k) => y > k (范围1)
将不等式1带入等式11/k=1/x+1/y <= 1/y+1/y  =>  y <= 2k(范围2)
综上,k<y<=2k

AC代码(C++11,不等式推导)

#include<bits/stdc++.h>
using namespace std;
int main() {
    int k;
    while (scanf("%d", &k) == 1) {
        vector<int> X, Y; // 存储答案
        for (int y=k+1; y <= 2*k; y ++)
            if (y*k%(y-k) == 0) {
                X.push_back(y*k/(y-k));
                Y.push_back(y);
            }
        printf("%d\n", X.size());
        for (int i=0; i < X.size(); i ++) printf("1/%d = 1/%d + 1/%d\n", k, X[i], Y[i]);
    }
    return 0;
}
发布了128 篇原创文章 · 获赞 87 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40738840/article/details/104442813
今日推荐