2

いくつかのテストデータを生成しようとしています。

ある日付範囲で割り当てる必要のある予定が1000あるとします。

今、私はこれらの予定を、月末の1日あたりの予定の数が月の初めの2倍になるように配布する必要があります。予定の増加は、一定の速度で増加する必要があります。

たとえば、その月の1日に5つの予定がある場合、月末までに1日あたり10の予定を取得します。

予約は平日にのみ行うことができます。

この方法でこれらの日付を配布するのに役立つ適切なアルゴリズムはありますか?

編集

これは、Henriksソリューションに触発されて、これまでに得た最高のものです。

    private int GetNumForCurrentDate (DateTime date)
    {
        int daysInMonth = DateTime.DaysInMonth ( date.Year, date.Month );

        // x is the number of appointments on the first day
        double firstDay = this._NumPerMonth / ( ( ( ratio + 1 ) / 2 ) * daysInMonth );

        // x * ratio is the number of appointments on the last day.
        double lastDay = firstDay * ratio;

        // Interpolate a value between the first and last days
        double exactNumOnThisDay = firstDay + ( lastDay - firstDay ) * ( (double)date.Day / (double)daysInMonth );
        int numOnThisDay = Convert.ToInt32 ( Math.Truncate ( exactNumOnThisDay ) );

        // Accumulate any overflow
        this._Overflow += exactNumOnThisDay - numOnThisDay;
        if ( this._Overflow > 1 )
        {
            // Shove the overflow into our number when it gets into whole number teritory
            numOnThisDay++;
            this._Overflow--;
        }

        return numOnThisDay;
    }

日付を指定して特定の日に割り当てる日数を返します。毎月の割り当てを分離し、四捨五入のオーバーフローを処理しますが、完全ではなく、最終日に割り当てる日数が不足しますが、今のところ十分であり、私はそれを完了するための時間が不足しています。 。

4

1 に答える 1

1

初日の予定数はx、最終日の予定数は2倍なので、平均で1.5倍になります。平日がyの場合、xは1000 /(1.5y)です。したがって、初日は667 / y、最終日は1333 / yで、その間の日数を補間します。

于 2010-02-11T13:31:59.447 に答える