1079 Ratio

1079 -- Ratio
id:Ozyさんからのリクエスト。
有理数(分子と分母の整数の組)が与えられ、その数に近い値になるように分数を生成するという問題。
最初の分母は1から始まり、段々と分母の数を増やしていき、もっとも最初の数に近くなるように分子を選ぶ。このとき、より近い数になったらその分子と分母のペアを出力する(同じだったら出力しない)。各セットの間には空行を入れる。
GCCで162バイト。
(追記)id:O-sakaさんに抜かされたので139byte。
(さらに追記)なんで気付かなかったんだろう?138byte。

a,b,c;
float f,g,h;
main(n){
  for(;~scanf("%d%d",&a,&b);puts(""))
    for(n=0,f=a*1./b,g=1e9;n++<=b;(g-f)*(g-f)>(h-f)*(h-f)?printf("%d/%d\n",c,n,g=h):0)
      c=f*n+.5,h=c*1./n;
}

「もっとも最初の数に近くなるように」するために、0.5を足しているくらいでしょうか。
ところどころ無理やり浮動小数点に変換しているところが気持ち悪い。
(追記)138byte。

b,c;
float a,g,h;
main(n){
  for(;~scanf("%f%d",&a,&b);puts(""))
    for(n=0,g=a,a/=b;n++-b;g*g>h*h&&printf("%d/%d\n",c,n,g=h))
      c=a*n+.5,h=c*1./n-a;
}

これ以上はいんちきくさいので、打ち止め。
(もちろん見落としがあれば減らしますが)