zoukankan      html  css  js  c++  java
  • 法里数列

    题意:给个小数p(0<=p<1),求差值与其最小的不可约分分数且分母不能超过n。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     int p,t,m;
     6     double x;
     7     scanf("%d",&t);
     8     while(t--)
     9     {
    10         scanf("%d%d%lf",&p,&m,&x);
    11         int  a=0,b=1,c=1,d=1,e,f;
    12         while(true)
    13         {
    14             e=a+c;
    15             f=b+d;
    16             int gcd=__gcd(e,f);
    17             e/=gcd;f/=gcd;
    18             if(f>m) break;
    19             if(1.0*e/f<=x)
    20             {
    21                 a=e;b=f;
    22             }
    23             else
    24             {
    25                 c=e;d=f;
    26             }
    27         }
    28         printf("%d ",p);
    29         if(fabs(1.0*a/b-x)>fabs(1.0*c/d-x))
    30             printf("%d/%d
    ",c,d);
    31         else
    32             printf("%d/%d
    ",a,b);
    33     }
    34     return 0;
    35 }
     1 //暴力
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <vector>
     6 #include <cmath>
     7 #include <algorithm>
     8 #include <cstdlib>
     9 #include <string>
    10 using namespace std;
    11 int t,n,k;
    12 double x;
    13 int p,q,bp,bq;
    14 double br,cr;
    15 int  main()
    16 {
    17   scanf("%d",&t);
    18   while(t--)
    19 {
    20      scanf("%d %d %lf",&k,&n,&x);
    21      bq=n;
    22      cr=bq*x;
    23      bp=ceil(cr);
    24      cr=(double)bp/(double)bq;
    25      br=fabs(x-cr);
    26      for(int i=n-1;i>=1;i--)
    27      {
    28          q=i;
    29          cr=q*x;
    30          p=ceil(cr);//cr可能小于1,不用ceil就是p=0,后面的cr不变,就无法更新了。
    31          cr=(double)p/(double)q;
    32          cr=fabs(x-cr);
    33          if(cr<br)
    34          {
    35              br=cr;
    36              bp=p;
    37              bq=q;             
    38          }
    39      }
    40      int gcd=__gcd(bp,bq);
    41      bp/=gcd;
    42      bq/=gcd;
    43      printf("%d %d/%d
    ",k,bp,bq);
    44 }    
    45 return   0;
    46 }
  • 相关阅读:
    python正则表达式
    装饰器和生成器和迭代器
    进一步认识函数
    python:关于函数的初认识
    python的 随手记----字符编码与转码
    python:元祖与字典与集合的粗浅认识
    python:模块导入之浅认识
    java socket编程
    Spring框架下的单元测试方法
    ModelDriven机制及其运用
  • 原文地址:https://www.cnblogs.com/tingtin/p/9601248.html
Copyright © 2011-2022 走看看