艺术与篮球(c和python)

Description

小蓝出生在一个艺术与运动并重的家庭中。
妈妈是位书法家,她希望小蓝能通过练习书法,继承她的艺术天赋,并练就一手好字。爸爸是一名篮球教练,他希望小蓝能通过篮球锻炼身体,培养运
动的激情和团队合作的精神。
为了既满足妈妈的期望,又不辜负爸爸的心意,小蓝决定根据日期的笔画数来安排自己的练习。首先,他会将当天的日期按照 YYYYMMDD 的格式
转换成一个 88 位数,然后将这 88 位数对应到汉字上,计算这些汉字的总笔画数。如果总笔画数超过 5050,他就去练习篮球;如果总笔画数不超过 5050,他就去练习书法。
例如,在 20242024 年 11 月 11 日这天,日期可表示为一个 88 位数字 2024010120240101,其转换为汉字是“二零二四零一零一”。日期的总笔画数为 $2 + 13 + 2 + 5 + 13 +
1 + 13 + 1 = 50$,因此在这天,小蓝会去练习书法。
以下是汉字的笔画数对照表:

汉字笔画数汉字笔画数
131344
1144
2222
3322
5522

现在,请你帮助小蓝统计一下,在 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;
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值