在日期范围内分配约会

时间:2010-02-11 12:59:55

标签: algorithm date test-data

我正在尝试生成一些测试数据。

假设我需要在一个日期范围内分配1000个约会。

现在我需要分发这些约会,以便在月末每天的预约数量是每月的两倍。任命的增加需要以一致的速度增加。

因此,例如,如果在该月的第一天有5次约会,到月底我们将每天获得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;
    }

它返回在给定日期的特定日期分配的天数。 它涉及将分配分配到每个月并处理舍入溢出,但它不是很完美,它用完了最后一天的分配,但它现在已经足够好了,我已经没时间完善了它。

1 个答案:

答案 0 :(得分:1)

x第一天的约会,最后一天的2倍,平均为1.5倍。 当有y个工作日时,x为1000 /(1.5y)。 因此,第一天为667 / y,最后为1333 / y,插入日期为