鱼C论坛

 找回密码
 立即注册
查看: 1025|回复: 3

在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

[复制链接]
发表于 2023-12-14 19:28:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。

牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的。

一个8位数字是回文的,当且仅当对于所有的i
(1≤i≤8
)从左向右数的第i
个 数字和第9−i
个数字(即从右向左数的第i
个数字)是相同的。

例如:

对于2016年11月19日,用8位数字20161119表示,它不是回文的。
对于2010年1月2日,用8位数字20100102表示,它是回文的。
对于2010年10月2日,用8位数字20101002表示,它不是回文的。
每一年中都有12个月份:

其中,1,3,5,7,8,10,12月每个月有31天;4,6,9,11月每个月有30天;而对于2月,闰年时有29天,平年时有28天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:

这个年份是4的整数倍,但不是100的整数倍;
这个年份是400的整数倍。
例如:

以下几个年份都是闰年:2000,2012,2016。
以下几个年份是平年:1900,2011,2014。
输入描述
两行,每行包括一个8位数字。

第一行表示牛牛指定的起始日期date1


第二行表示牛牛指定的终止日期date2


题目数据保证:

date1
—定不晚于 date2

都是真实存在的日期;
年份部分一定为4位数字;
首位数字不为0;
输出描述
一个整数,表示在date1
和date2
之间,有多少个日期是回文,





求求这个啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-14 19:29:19 | 显示全部楼层
好的,下面给出一种实现思路和代码。

首先,我们需要编写一个函数来判断一个8位数字是否是回文的。我们可以将这个数字转换成字符串,然后使用字符串的切片操作来比较前4位和后4位是否相同。

接下来,我们需要遍历从date1到date2之间的每个日期,并计算有多少个日期是回文的。我们可以使用两个嵌套的循环,外层循环遍历年份,内层循环遍历月份。在内层循环中,根据月份和闰年情况来确定该月份的天数,并遍历每一天判断是否是回文的。

最后,我们需要统计回文日期的数量并输出结果。

下面是完整的代码实现:
def is_palindrome(num):    num_str = str(num)    return num_str[:4] == num_str[4:][::-1]def count_palindromic_dates(date1, date2):    count = 0        year1 = int(date1[:4])    year2 = int(date2[:4])    month1 = int(date1[4:6])    month2 = int(date2[4:6])    day1 = int(date1[6:])    day2 = int(date2[6:])        for year in range(year1, year2+1):        for month in range(1, 13):            if year == year1 and month < month1:                continue            if year == year2 and month > month2:                continue                        if month in [1, 3, 5, 7, 8, 10, 12]:                days_in_month = 31            elif month == 2:                if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):                    days_in_month = 29                else:                    days_in_month = 28            else:                days_in_month = 30                        for day in range(1, days_in_month+1):                if year == year1 and month == month1 and day < day1:                    continue                if year == year2 and month == month2 and day > day2:                    continue                                date = int(f"{year:04d}{month:02d}{day:02d}")                if is_palindrome(date):                    count += 1        return countdate1 = input()date2 = input()count = count_palindromic_dates(date1, date2)print(count)
希望能帮助到你!如果有任何疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-14 19:40:44 | 显示全部楼层
还有没有另一种思路啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-14 19:41:08 | 显示全部楼层
小小wu~ 发表于 2023-12-14 19:40
还有没有另一种思路啊

当然,还有其他一种思路可以解决这个问题。我们可以直接遍历从date1到date2之间的每个日期,并判断每个日期是否是回文的。具体步骤如下:

1. 将date1和date2转换成整数类型。
2. 初始化一个计数器count,用来记录回文日期的数量。
3. 从date1开始,循环遍历每个日期,直到date2为止。
4. 在每次循环中,判断当前日期是否是回文的,如果是,则计数器count加1。
5. 最后输出计数器count的值。

下面是另一种实现方式的完整代码:
def is_palindrome(num):    num_str = str(num)    return num_str == num_str[::-1]def count_palindromic_dates(date1, date2):    count = 0        year1 = int(date1[:4])    month1 = int(date1[4:6])    day1 = int(date1[6:])        year2 = int(date2[:4])    month2 = int(date2[4:6])    day2 = int(date2[6:])        for year in range(year1, year2+1):        for month in range(1, 13):            if year == year1 and month < month1:                continue            if year == year2 and month > month2:                continue                            days_in_month = 31            if month in [4, 6, 9, 11]:                days_in_month = 30            elif month == 2:                if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):                    days_in_month = 29                else:                    days_in_month = 28                                    for day in range(1, days_in_month+1):                if year == year1 and month == month1 and day < day1:                    continue                if year == year2 and month == month2 and day > day2:                    continue                date = int(f"{year:04d}{month:02d}{day:02d}")                if is_palindrome(date):                    count += 1                        return countdate1 = input()date2 = input()count = count_palindromic_dates(date1, date2)print(count)
希望这次解法也能满足你的需求!如果还有其他问题,欢迎继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 16:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表