zoukankan      html  css  js  c++  java
  • 洛谷P1298 最接近的分数

    P1298 最接近的分数

    题目描述

    给出一个正小数,找出分子(非负)不超过M,分母不超过N(正数)的最简分数或整数,使其最接近给出的小数。“最接近”是指在数轴上该分数距离给出的小数最近,如果这个分数不惟一,输出“TOO MANY”。

    输入输出格式

    输入格式:

    输入文件共有二行,第一行包含两个用空格隔开的正整数M和N(1<=M,N<=107),表示要求的分数其分子不超过M,分母不超过N;第二行为小数R(R>0),R的整数部分为一个阿拉伯数字,小数部分最多有十位。

    输出格式:

    输出文件仅一行,若解唯一则输出“分子/分母”(整数K写成K/1),否则输出“TOO MANY”。

    输入输出样例

    输入样例#1:
    360 120
    3.1415926536
    
    输出样例#1:
    355/113
    #include<cstdio>
    using namespace std;
    int main(){
        double xs,cha=10.0,f;
        int m,zi,mu,n,ans=-1,js;
        scanf("%d%d",&n,&m); scanf("%lf",&xs);
        for(int i=1;i<=m;i++){
            js=xs*i;
            if (js>n) break;
            f=(double)js/(double)i;
            if (i==1) {ans=1; cha=xs-f; zi=js; mu=i;}
            else if (zi*i!=mu*js){
                if(xs-f==cha)ans++;
                if(xs-f<cha){
                    ans=1;cha=xs-f;zi=js;mu=i;
                }
            }
            js++;
            if (zi*i!=mu*js&&js<=n){
                f=(double)js/(double)i;
                if (f-xs==cha) ans++;
                if (f-xs<cha){
                    ans=1; cha=f-xs; zi=js; mu=i;
                }
            }
        }
        if (ans>1) printf("TOO MANY
    ");
        else if (ans==-1) printf("%d/1
    ",n);
        else printf("%d/%d
    ",zi,mu);
        return 0;
    }
  • 相关阅读:
    IO流
    myEclipse的使用
    单例模式
    日期的使用
    String类的常用方法
    break、continue和return的区别
    包装类和随机数
    enum类的使用
    Java基础概念性的知识总结
    汇编中的函数调用与递归
  • 原文地址:https://www.cnblogs.com/thmyl/p/7515672.html
Copyright © 2011-2022 走看看