如何使用c语言找到最接近的分数

问题

img


我的思路

img

img

报错
time limit exceed50%
希望得到的帮助
写一个不超时的代码(最好在我的代码基础上改)

仅供参考!谢谢!
写得不好,循环嵌套速度有点慢,你看合不合要求?
你若有好的算法,多多指教!

img

img

img

#include <stdio.h>
#include <math.h>

int *getarr(int x, int y, int n)
{
    if (n < 1 || n > 100000 || x < 1 || x > 100000 || y < 1 || y > 100000)
        return NULL;
        
    static int arr[2] = {0, 1};
    register int j = 1;
    double m = x * 1.0 / y * 1.0;
    register double tmp1, tmp2;

    for (int b = 1; b <= n; b++)
    {
        for (int a = 0; a < 100000; a++)
        {
            tmp1 = a * 1.0 / b - m;
            do
            {
                tmp2 = (a + j * 1.0) * 1.0 / b - m;
                j++;
            } while (tmp2 < 0);

            if (tmp1 <= 0.0 && tmp2 >= 0.0)
            {
                if (tmp2 > fabs(tmp1))
                {
                    if (1.0 * a / b > arr[0] * 1.0 / arr[1])
                    {
                        arr[0] = a;
                        arr[1] = b;
                    }
                }
                else
                {
                    if (1.0 * (a + j - 1) / b > arr[0] * 1.0 / arr[1])
                    {
                        arr[0] = a + j - 1;
                        arr[1] = b;
                    }
                }
            }
        }
    }

    return arr;
}

int main(int argc, char *argv[])
{
    int x, y, n;
    int *p = NULL;
    scanf("%d%d%d", &x, &y, &n);
    p = getarr(x, y, n);
    printf("%d/%d", p[0], p[1]);
}