と、わざわざ計算して枠番を出す機会も普通は無いと思います。
1番手っ取り早いのは対応表をデータベースに入れておく、でしょうか。
JRAだと17頭以上になった時には1つの枠に3頭のような特殊パターンがありますね。
こんなのは7・8枠の2パターンだけなので例外的に処理してしまってもOKかなと。
ネット上では数列やら数式なんかも既にあります。

今回必要になったのは、香港の新聞で使ってみようと思ったから。
馬番とゲート番号が違うので、ゲート番号に日本と同じような枠の色を入れたらもっと直感的かな?と思ってん。

香港だと最大14頭。
上記のような特殊パターンもありません。
なので実装は簡単。
チラッと検索してみると、VBAやらで実装されている方法が上位に来ますね。
MOD(余り計算)が入ってたりするけれども、今回は必要ナシです。
C#で書くとこんな。

t2


void calcu()
        {
            for (var i = 9; i < 15; i++)
            {
                for (var ii = 1; ii < i + 1; ii++)
                {
                    Console.WriteLine("{0}:{1}:{2}", i, ii, GetWkuban(i, ii));
                }
            }
        }
        int GetWkuban(int tosu, int umaban)
        {
            //8頭以下なら馬番を返す。
            if (tosu < 9)
                return umaban;

            var increases = tosu - 8;
            //増加分の影響を受けるかの判定。影響ナシなら馬番を返す。
            if (umaban < 9 - increases)
                return umaban;

            //自分より後に何頭いるか
            var upperself = tosu - umaban;
            //既に埋まった枠
            var filledcount = upperself / 2;
            return 8 - filledcount;
        }

読みやすく書いてもこの程度です。
一応結果のチェックを。
9~14頭で確認しておきましょ。

頭数:馬番:枠番

9:1:1
9:2:2
9:3:3
9:4:4
9:5:5
9:6:6
9:7:7
9:8:8
9:9:8
10:1:1
10:2:2
10:3:3
10:4:4
10:5:5
10:6:6
10:7:7
10:8:7
10:9:8
10:10:8
11:1:1
11:2:2
11:3:3
11:4:4
11:5:5
11:6:6
11:7:6
11:8:7
11:9:7
11:10:8
11:11:8
12:1:1
12:2:2
12:3:3
12:4:4
12:5:5
12:6:5
12:7:6
12:8:6
12:9:7
12:10:7
12:11:8
12:12:8
13:1:1
13:2:2
13:3:3
13:4:4
13:5:4
13:6:5
13:7:5
13:8:6
13:9:6
13:10:7
13:11:7
13:12:8
13:13:8
14:1:1
14:2:2
14:3:3
14:4:3
14:5:4
14:6:4
14:7:5
14:8:5
14:9:6
14:10:6
14:11:7
14:12:7
14:13:8
14:14:8