1 条题解

  • 0
    @ 2025-4-7 21:38:08

    C++ :

    #include <iostream>
    #include <climits>
    using namespace std;
    
    int main() {
    	int a, b, l;
    	double diff = INT_MAX;
    	int ra, rb;
    	cin >> a >> b >> l;
    	int m, n;
    	for (int i = 1; i <= l; i++) {
    		if(a>=b){
    			m=1;
    			n=i;
    		} else {
    			m=i;
    			n=l;
    		}
    		for (int j = m; j <= n; j++) {
    			int x, y, z;
    			if (i >= j) {
    				x = i;
    				y = j;
    			} else {
    				x = j;
    				y = i;
    			}
    			do {
    				z = x % y;
    				x = y;
    				y = z;
    			} while (z); //求最大公约数,公约数为1则x,y互质
    			if (x == 1 && (double)i / j >= (double)a / b
    			        &&  (double)i / j - (double)a / b < diff  ) {
    				diff = (double)i / j - (double)a / b;
    				ra = i;
    				rb = j;
    			}
    		}
    	}
    	cout << ra << " " << rb << endl;
    	return 0;
    }
    

    Pascal :

    program radio;
    var
    a,b,l,i,j,k,m:longint;
    p,q,ans:double;
    function gcd(x,y:longint):longint;
    begin
    if y=0 then exit(x) else exit(gcd(y,x mod y));
    end;
    begin
    
    readln(a,b,l);
    p:=a/b;
    ans:=1010101010;
    for i:=1 to l do
      for j:=1 to l do
      if (gcd(i,j)=1)and(i/j>=p)and(i/j-p<ans) then begin
      ans:=i/j-p;
      k:=i;
      m:=j;
      end;
    writeln(k,' ',m);
    
    end.
    
    • 1

    信息

    ID
    1950
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者