Math 查找一个月内的周行数

Math 查找一个月内的周行数,math,date-arithmetic,Math,Date Arithmetic,考虑到开始日(星期三=4)和一个月的天数(31),找到一个月的日历所需的周行数的优雅方法是什么 对于当前月份(startDay=4,daysInMonth=31),它将是5。但如果daysInMonth=33,则为6行 这不太管用: int numRows = (startDay+daysInMonth)/daysInWeek; if ((startDay+daysInMonth) % daysInWeek != 0) { numRows++; } 实际上,我认为你原来的算法是正确的,

考虑到开始日(星期三=4)和一个月的天数(31),找到一个月的日历所需的周行数的优雅方法是什么

对于当前月份(startDay=4,daysInMonth=31),它将是5。但如果daysInMonth=33,则为6行

这不太管用:

int numRows = (startDay+daysInMonth)/daysInWeek;
if ((startDay+daysInMonth) % daysInWeek != 0) {
    numRows++;
}

实际上,我认为你原来的算法是正确的,只需要在做模daysInWeek时减去1

daysInWeek = 7
startDay = 3 # Zero based day of week array, 3 = Wednesday
daysInMonth = 31
numRows = (startDay+daysInMonth)/daysInWeek

if ((startDay+daysInMonth - 1) % daysInWeek != 0)
    numRows += 1
end

print numRows
它正确地显示了6。(顺便说一句,为什么你需要一个有33天的月?)33天的月应该是6行(如果有这样的事情的话)


事实上,我认为您原来的算法是正确的,只需在每周进行模日运算时减去1即可

daysInWeek = 7
startDay = 3 # Zero based day of week array, 3 = Wednesday
daysInMonth = 31
numRows = (startDay+daysInMonth)/daysInWeek

if ((startDay+daysInMonth - 1) % daysInWeek != 0)
    numRows += 1
end

print numRows
它正确地显示了6。(顺便说一句,为什么你需要一个有33天的月?)33天的月应该是6行(如果有这样的事情的话)

只要换成

int numRows = (startDay + daysInMonth - 1) / daysInWeek;
if ((startDay+daysInMonth - 1) % daysInWeek != 0) {
    numRows++;
}
你应该得到正确的结果。 编辑:只是稍微扩展一下:您的想法是正确的,您只是忘记了说明第1天的偏移量是0,而不是1。

只需更改为

int numRows = (startDay + daysInMonth - 1) / daysInWeek;
if ((startDay+daysInMonth - 1) % daysInWeek != 0) {
    numRows++;
}
你应该得到正确的结果。
编辑:只是稍微扩展一下:您的想法是正确的,您只是忘记了说明第1天的偏移量是0,而不是1。

每行的第一天是什么?星期天还是星期一?你的算法似乎是正确的;你期望的答案是什么?基本上是正确的。请看下面选择的答案。每行的第一天是什么?星期天还是星期一?你的算法似乎是正确的;你期望的答案是什么?基本上是正确的。请参阅下面选择的答案。这不起作用。如果daysInMonth=33,startDay=4,则得到5行。应该是6岁。我会手工做这道数学题的。33 - (7 - 4) = 30. 30 / 7 = 4.28... 赛林=5。5+1=6这不起作用。如果daysInMonth=33,startDay=4,则得到5行。应该是6岁。我会手工做这道数学题的。33 - (7 - 4) = 30. 30 / 7 = 4.28... 赛林=5。5+1=6你说得对,它在一天内有效,在一个月内有效。但是对于daysInMonth=32,它应该只返回5周,但返回6周。对不起,我做了更改。你需要从模线中减去1。你是对的,它对daysInMonth=33有效。但是对于daysInMonth=32,它应该只返回5周,但返回6周。对不起,我做了更改。你需要从模线中减去1,这是不正确的。请核对“2018/09”月份。少了一排。实际上应该有6行,但得到5行。这是不正确的。请核对“2018/09”月份。少了一排。实际上应该有6行,但得到5行。