Fractions Again?! UVA - 10976 (枚举)

按照刘汝佳书上的思路来,y >= x,可以转换为y <= 2k。因为k的范围足足有10000,精度问题很严重,所以此题中绝对不能出现除法。那就只能通过通分来把除法转化为乘法 :ky / y-k 。可以预见,当k为正整数的时候符合条件即可。

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1000;
int xans[maxn], yans[maxn];
int main()
{
    int k, x, y;
    while(scanf("%d",&k) != EOF){
        int index = 1;
        for( y = k+1; y <= 2*k; y++){
            if((k*y) % (y-k) == 0){
                xans[index] = (k*y) / (y-k);
                yans[index] = y;
                index++;
            }
        }
        printf("%d\n",--index);
        for(int i = 1; i <= index; i++)
            printf("1/%d = 1/%d + 1/%d\n", k, xans[i], yans[i]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/82721798