#include<stdio.h>
#include<math.h>
int main() {
double a, b, c, d;
scanf("%lf %lf", &a, &b);
if (fabs(b - (int)b) < 1e-8) {
printf("%d 0.0000000000\n", (int)b);
}
else {
if (b == 1) {
printf("More than one!\n");
}
if (b >1)
{
c = a + 1;
for (; c++;)
{
d = fabs(c / a - b);
if (d < 1e-8)
{
printf("%d/%d %.10lf\n", (int)c, (int)a, d);
break;
}
}
}
if (b < 1)
{
c = a -1;
for (; c--;c>0)
{
d = fabs(c / a - b);
if (d < 1e-8)
{
printf("%d/%d %.10lf\n", (int)c, (int)a, d);
break;
}
}
}
}
return 0;
}
你这写的问题很多啊
给你写了下
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, d, g;
scanf("%lf%lf", &a, &b);
int flag=1;
if(b<0) {
flag=-1;
b=fabs(b);
}
double min=b,minnum1=1,minnum2=1;
if (fabs(b - (int)b) < 1e-8)
{
printf("%d 0.0000000000\n", (int)b);
}
else
{
if (b == 1)
{
printf("More than one!\n");
}
else if (b >1)
{
for(c=1; c/g<=b; c++)
{
for(g=1; g<=a; g++)
{
d=fabs(c/g-b);
if(d<min)
{
min=d;
minnum1=c;
minnum2=g;
}
}
}
printf("%d/%d %.10lf",flag*(int)minnum1,(int)minnum2,min);
}
}
return 0;
}
for (; c++;)
{
d = fabs(c / a - b);
if (d < 1e-8)
{
printf("%d/%d %.10lf\n", (int)c, (int)a, d);
break;
}
}
逻辑我先没看,只检查了代码
循环有问题,d = fabs(c / a - b);,a和b的值一直不变,c一直++,那么d的值就一直增大,循环结束条件是d<0.0000000001,所以就是死循环,一直运行for循环
for循环那有问题 就是for(;c++;)如果你想让它一直循环也不是这样写的吖,写成for(;;)才对
😂😂多有得罪,望采纳谢谢啦
简单来说,就是for循环实现出现了些许差错,循环次数过多,导致时间过长,进而显示超时。
for循环执行次数太多,所以超时,检查一下算法设计