用python解题。题目描述 请编程统计:从1900年1月1日(当天是星期一)开始经过的n年当中,每个月的13号这一天是星期一、星期二、星期三、……、星期日的次数分别是多少? 输入 共一行,一个整数n (1≤n≤400)。 输出 仅一行, 有7个整数(依次是星期一、星期二、星期三、……、星期日的次数),各数间以空格相隔。 样例输入 1 样例输出 1 3 1 2 2 2 1
时间: 2023-05-30 16:05:59 浏览: 199
解题思路:
首先,我们需要知道1900年1月1日是星期一。然后,我们可以预处理出从1900年到3999年的每个月13号是星期几。这里我们可以使用Zeller公式。
Zeller公式:
weekday = (year + ⌊year/4⌋ + ⌊century/4⌋ - 2*century + ⌊13*(month+1)/5⌋ + day - 1) mod 7
其中,year为年份(例如2019年),century为世纪数(例如20世纪为19,21世纪为20),month为月份(1月为1,2月为2,以此类推),day为日期(例如1日为1,2日为2,以此类推),mod为取模运算,⌊⌋表示向下取整。
根据Zeller公式,我们可以预处理出从1900年到3999年每个月13号是星期几。然后,统计出每个星期出现的次数即可。
具体实现见代码:
相关问题
某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网。\na boy works for 3 days while has a 2 days
### 回答1:
众所周知,199年1月1日是星期一,因此,他在1月1日、1月2日、1月3日是在打渔,1月4日、1月5日是在晒网。如果要编程回答任意的一天他在打渔还是晒网,可以先计算出从199年1月1日到该天的总天数,再将总天数除以5取余数,如果余数小于3,则该天在打渔,否则在晒网。
### 回答2:
我们可以利用取余运算符来判断某一天是打渔还是晒网。假设从1990年1月1日开始计算,我们可以将每一天用一个整数表示,打渔用0表示,晒网用1表示。因此,我们需要计算给定日期与1990年1月1日之间的天数差。下面是一个用Python编写的程序示例:
```python
import datetime
def is_fishing_or_drying(start_date, target_date):
# 计算日期差
days_diff = (target_date - start_date).days
# 判断是打渔还是晒网
if days_diff % 5 < 3:
return "打渔"
else:
return "晒网"
# 设定开始日期
start_date = datetime.datetime(1990, 1, 1)
# 输入目标日期
target_date = input("请输入目标日期(格式:YYYY-MM-DD):")
target_date = datetime.datetime.strptime(target_date, "%Y-%m-%d")
# 判断是打渔还是晒网
result = is_fishing_or_drying(start_date, target_date)
print(result)
```
你可以输入任意的日期,程序将会输出该天是打渔还是晒网。
### 回答3:
根据题目所给信息,从1990年1月1日开始,某人按照三天打渔,两天晒网的规律工作。我们可以通过编程来判断该人在任意一天是在打渔还是晒网。
解题思路:
1. 首先,我们设定一个变量,表示从1990年1月1日开始的总天数。
2. 然后,通过对总天数取余数,判断今天是在打渔还是晒网。若总天数 % 5 的余数小于3,表示打渔;反之,表示晒网。
以下是一个用Python编写的程序示例:
```python
def check_activity(day):
total_days = day
remain_days = total_days % 5
if remain_days < 3:
return "打渔"
else:
return "晒网"
# 假设要查询某人从1990年1月1日起的第500天是在打渔还是晒网
day = 500
result = check_activity(day)
print("第500天:" + result)
```
根据上述示例程序,我们可以得知从1990年1月1日开始的第500天该人在打渔还是晒网。通过编程可以根据给定的总天数计算出活动类型。
阅读全文