问题
我的思路
报错
time limit exceed50%
希望得到的帮助
写一个不超时的代码(最好在我的代码基础上改)
问题
报错
time limit exceed50%
希望得到的帮助
写一个不超时的代码(最好在我的代码基础上改)
仅供参考!谢谢!
写得不好,循环嵌套速度有点慢,你看合不合要求?
你若有好的算法,多多指教!
#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]);
}