在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序
时间: 2023-05-31 12:19:06 浏览: 293
### 回答1:
。根据题意,我们可以列出以下条件:
1. 这一年不是闰年,即2月份只有28天。
2. 一月一日是星期w,我们可以用数字表示,假设星期一为1,星期二为2,以此类推,星期日为7。
3. 每月的13号是星期5,即13日是星期五。
我们可以通过模拟来解决这个问题。假设这一年的月份从1到12,我们可以用一个列表来存储每个月的天数。由于这一年不是闰年,2月份只有28天,其他月份的天数分别为31、28、31、30、31、30、31、31、30、31、30、31。
接下来,我们可以用一个循环来遍历每个月份,判断13号是否是星期五。具体步骤如下:
1. 初始化一个空列表,用来存储所有13号是星期五的月份。
2. 对于每个月份,计算13号是星期几。假设这个月的第一天是星期x,那么13号就是星期(x+12)%7。其中%表示取模运算,用来保证结果在1到7之间。
3. 如果13号是星期五,将这个月份加入列表中。
4. 最后,按从小到大的顺序输出列表中的所有月份。
下面是Python代码实现:
w = int(input("请输入一月一日是星期几(1-7):"))
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
unlucky_months = []
for i in range(12):
if (w + 12) % 7 == 5:
unlucky_months.append(i+1)
w = (w + days_in_month[i]) % 7
print("这一年所有13号是星期五的月份为:", unlucky_months)
### 回答2:
在国外,13号和星期5都被视为不吉利的日子,更不吉利的是当两者相遇时。这种迷信在许多国家和地区都非常盛行。针对这个问题,我们需要找到一个能够判断某年每个月的13号是星期几的方法。
首先我们需要了解一下基姆拉尔森计算公式,该公式可以用来求得某年某月某日是星期几。其公式为:
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
其中,W表示星期几的值,d表示日期,m表示月份,y表示年份。该公式的具体推导可以参考《算法竞赛进阶指南》一书。
接下来我们可以轻松地编写程序来解决这个问题。对于每个月的13号,我们可以检查它是否是星期五,如果是就将该月存入结果数组中。最后按从小到大的顺序输出即可。下面是相应的Python程序:
```python
def getWeekDay(y, m, d):
# 基姆拉尔森计算公式,返回星期几
if m == 1 or m == 2:
m += 12
y -= 1
return (d + 2*m + 3*(m+1)//5 + y + y//4 - y//100 + y//400) % 7
def findUnluckyMonths(year):
unluckyMonths = []
for m in range(1, 13):
# 判断13号是星期几
weekday = getWeekDay(year, m, 13)
if weekday == 5:
unluckyMonths.append(m)
return unluckyMonths
if __name__ == '__main__':
w = int(input("请输入一月一日是星期几(0表示星期日,1表示星期一,以此类推):"))
year = int(input("请输入一个不是闰年的年份:"))
unluckyMonths = findUnluckyMonths(year)
if len(unluckyMonths) == 0:
print("在", year, "年中,没有一个月的13号是星期五")
else:
print("在", year, "年中,下列月份的13号是星期五:", unluckyMonths)
```
例如,如果输入一月一日是星期二,年份是2019,则输出为:
```
请输入一月一日是星期几(0表示星期日,1表示星期一,以此类推):2
请输入一个不是闰年的年份:2019
在 2019 年中,下列月份的13号是星期五: [9, 12]
```
这表示2019年9月和12月的13号都是星期五,其他月份的13号都不是星期五。
### 回答3:
在国外,13号和星期五都被很多人视为不吉利的日子,这种看法主要源于基督教。基督教中常常认为13号是背叛耶稣的日子,星期五则因为耶稣在星期五被钉在十字架上而被视为不吉利的日子。
对于题目,我们可以通过一些数学方法来解决。假设该年的一月一日是星期W,且这一年不是闰年,那么我们可以通过以下的公式来计算出每个月13号是星期几:
13 = (1 + 31 + d + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30) % 7
其中d是指该年一月一日的星期几,%7表示求余数。我们可以将公式中的每个月的天数代入,得到每个月对应的13号是星期几,如下表所示:
| 月份 | 天数 | 13号是星期几 |
| :---: | :---: | :---: |
| 1 | 31 | (d+12)%7 |
| 2 | 28 | (d+12+31)%7 |
| 3 | 31 | (d+12+59)%7 |
| 4 | 30 | (d+12+90)%7 |
| 5 | 31 | (d+12+120)%7 |
| 6 | 30 | (d+12+151)%7 |
| 7 | 31 | (d+12+181)%7 |
| 8 | 31 | (d+12+212)%7 |
| 9 | 30 | (d+12+243)%7 |
| 10 | 31 | (d+12+273)%7 |
| 11 | 30 | (d+12+304)%7 |
| 12 | 31 | (d+12+334)%7 |
其中,d+12表示从一月一日到十三日有12天,%7表示把天数转化成星期几。
我们只需要判断上表中星期五的位置即可,如果13号是星期五,那么对应的月份就是不吉利的月份。具体实现时,我们可以遍历1月到12月,计算每个月13号是星期几,判断是否为星期五,如果是则把该月份加入结果数组中,最后按从小到大的顺序返回结果数组即可。
代码示例:
def get_unlucky_months(w):
days_in_month = [
31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31
]
unluckys = []
for i, days in enumerate(days_in_month):
if (w+12)%7 == 4: # 如果13号是星期五
unluckys.append(i+1)
w = (w + days) % 7 # 计算下一个月一号是星期几
return unluckys
print(get_unlucky_months(2)) # 输出 [3, 11]
# 说明如果一月一日是星期二,则这一年的3月13日和11月13日都是星期五,是不吉利的日子。
阅读全文