代码可能有点难看,敬请谅解。
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int fz,fm;
bool flag;
int main()
{
int m,n,i,j;
double r,min=999999.0,fzf=0.0;
scanf("%d%d",&m,&n);
scanf("%lf",&r);
for(j=1;j<=n;j++)
{
fzf=r*(j*1.0);
fzf+=0.5;
i=(int)fzf;
//printf("%d %d %d\n",i,j,flag);
if(fabs(r-(i*1.0)/(j*1.0))>min)continue;
if(__gcd(i,j)==1&&i<=m)
if(fabs(r-(i*1.0)/(j*1.0))<min){fz=i;fm=j;min=fabs(r-(i*1.0)/(j*1.0));flag=0;}
else if(r-(i*1.0)/(j*1.0)==min)flag=1;
}
if(fabs(r-0)<=min){printf("TOO MANY");return 0;}
if(flag==0)printf("%d/%d",fz,fm);
else printf("TOO MANY");
return 0;
}
卡了点#4,#5,找不出问题,大佬orz (这题好像蓝变紫了)