zoukankan      html  css  js  c++  java
  • hdu 4180

    题意; 求接近规定 分数 的 最大分数
    用到 farey 数列的第二条性质
    1
    #include <iostream> 2 #include<stdio.h> 3 using namespace std; 4 /** 5 |a/b-c/d|最小, 同分的|(ad-bc)/bd| 最小,,即求 6 |ax-by| 最小 7 若a,b 有公约数则同分即可。。最小为0 8 若a,b无公约数,即a,b互质,即求ax-by=1或 -ax+by = 1 9 此时需要注意 若a==1 求解释x=1,y=0.。。所以当a=1时需要特殊处理 10 若a!=1 时,,就需要对上面的两个式子ax-by=1或 -ax+by = 1判断,找出最接近的解,即比较分母大的即可 11 12 */ 13 long long ex_gcd(long long a,long long b,long long &x, long long &y){ 14 if(b==0){ 15 x =1; 16 y =0; 17 return a; 18 } 19 long long d = ex_gcd(b,a%b,x,y); 20 long long temp = x; 21 x = y; 22 y = temp - a/b * y; 23 return d ; 24 } 25 26 27 int main() 28 { 29 int t; 30 cin>>t; 31 long long a,b,x,y,gcd,d1,d2,c1,c2; 32 char c; 33 while(t--){ 34 cin>>a>>c>>b; 35 gcd = ex_gcd(a,b,x,y); 36 if(gcd!=1){ 37 cout<<a/gcd<<"/"<<b/gcd<<endl; 38 }else if(a==1){ 39 cout<<1<<"/"<<b-1<<endl; 40 }else{ 41 // d2 = ex_gcd(b,a,y2,x2); 42 d1 = (x+b)%b; 43 d2 = (-x+b)%b; 44 c1 = (-y+a)%a; 45 c2 = (y+a)%a; 46 // cout<<c1<<" "<<c2<<endl; 47 // cout<<d1<<" "<<d2<<endl; 48 if(d1>d2) 49 cout<<c1<<"/"<<d1<<endl; 50 else 51 cout<<c2<<"/"<<d2<<endl; 52 53 54 } 55 } 56 return 0; 57 }
  • 相关阅读:
    【Qt】无边框窗体中带有ActiveX组件时的一个BUG
    Qt:正确判断文件、文件夹是否存在的方法
    自定义Data Service Providers
    Facebook的ATOM Editor的底层Electron
    ASP.NET Web API中使用OData
    Oracle 使用
    ODP.NET 之访问 Oracle 数据库
    Oracle安装及使用入门
    架构设计
    CQRS模式实现
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3617715.html
Copyright © 2011-2022 走看看