Description
小蓝出生在一个艺术与运动并重的家庭中。
妈妈是位书法家,她希望小蓝能通过练习书法,继承她的艺术天赋,并练就一手好字。爸爸是一名篮球教练,他希望小蓝能通过篮球锻炼身体,培养运
动的激情和团队合作的精神。
为了既满足妈妈的期望,又不辜负爸爸的心意,小蓝决定根据日期的笔画数来安排自己的练习。首先,他会将当天的日期按照 YYYYMMDD
的格式
转换成一个 88 位数,然后将这 88 位数对应到汉字上,计算这些汉字的总笔画数。如果总笔画数超过 5050,他就去练习篮球;如果总笔画数不超过 5050,他就去练习书法。
例如,在 20242024 年 11 月 11 日这天,日期可表示为一个 88 位数字 2024010120240101,其转换为汉字是“二零二四零一零一”。日期的总笔画数为 $2 + 13 + 2 + 5 + 13 +
1 + 13 + 1 = 50$,因此在这天,小蓝会去练习书法。
以下是汉字的笔画数对照表:
汉字 | 笔画数 | 汉字 | 笔画数 |
---|---|---|---|
零 | 1313 | 五 | 44 |
一 | 11 | 六 | 44 |
二 | 22 | 七 | 22 |
三 | 33 | 八 | 22 |
四 | 55 | 九 | 22 |
现在,请你帮助小蓝统计一下,在 2000 年 01 月 01 日到 2024 年 04 月 13 日
这段时间内,小蓝有多少天是在练习篮球?
Input
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
Output
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分
思路
最开始做这道题我是按着最简单的方式,就是从20000101到20240413按一年12月,然后一月30天结果发现怎么提交都不对,下来看题解才知道要包括闰年(2月最特殊,若是闰年则29天,平年则是28天),大月和小月(4,6,9,11为小月)
当然这道题的数据处理依然还是要用取位的原理,来分离年月日。
python
a=[13,1,2,3,5,4,4,2,2,2] # 列表统计
def total_day(x): #取位统计和
total=0
while x>0:
total+=a[x%10]
x//=10
return (1 if total>50 else 0)
sum=0
for i in range(20000101,20240413+1):
year=i//10000
month=i//100%100
day=i%100
if (month>12 or day>31 or month==0 or day==0):continue # 判断合法时间
if (month == 2): # 要先判断月,如果先判断年的话那就得在,里面重复判断其他月
if (year%400==0 or year%100!=0 and year%4==0 ): # 判断闰年
if day>29:continue
else:
if day>28:continue
if (month==4 or month==6 or month==9 or month==11):
if day>30:continue
else:
if day>31:continue
sum+=total_day(i)
print(sum)
C
#include "stdio.h"
int a[10]={13,1,2,3,5,4,4,2,2,2};
int getsum(int x)
{
int sum=0;
while (x)
{
sum+=a[x%10];
x/=10;
}
return sum>50?1:0;
}
int main()
{
int ans=0;
for (int i=20000101;i<=20240413;i++)
{
int y=i/10000,m=i/100%100,d=i%100;
if (m==0 || m>12 || d==0)
{
continue;
}
if(m==2)
{
if(y%4==0 && y%100!=0 ||y%400==0)
{
if(d>29)continue;
}
else{
if(d>28)continue;
}
}
else if(m==4 || m==6||m==9||m==11)
{
if (d>30)continue;
}
else {
if (d>31)continue;
}
ans+= getsum(i);
}
printf("%d",ans);
return 0;
}