Featured image of post 艺术与篮球-蓝桥杯

艺术与篮球-蓝桥杯

1212 字

艺术与篮球-19937

题目:

小蓝出生于一个艺术与运动并重的家庭中。

妈妈是位书法家,她希望小蓝能通过练习书法,继承她的艺术天赋,并练就一手好字。爸爸是一名篮球教练,他希望小蓝能通过篮球锻炼身体,培养运动的激情和团队合作的精神。

为了既满足妈妈的期望,又不辜负爸爸的心意,小蓝决定根据日期的笔画数来安排自己的练习。首先,他会将当天的日期按照“YYYYMMDD”的格式转换成一个8位数,然后将这8位数对应到汉字上,计算这些汉字的总笔画数。如果总笔画数超过50,他就去练习篮球;如果总笔画数不超过50,他就去练习书法。

例如,在2024年1月1日这天,日期可表示为一个8位数字20240101,其转换为汉字是"二零二四零一零一”。日期的总笔画数为2+13+2+5+13+1+13+1=50,因此在这天,小蓝会去练习书法。

一下是汉字的笔画数对照表:

汉字 笔画数
13
1
2
3
5
4
4
2
2
2

现在,请你帮助小蓝统计一下,在2000年1月1日到2024年4月13日这段时间内,小蓝有多少天是在练习篮球?

解题思路

这道题目主要意思是从2000年1月1日~2024年4月13日期间,把年月日转换成汉字后总笔画数>50就去练篮球。求共有多少个满足条件的日期。 思路: 涉及到日期题目就要联想到数组、遍历、润平年… 要定义一个值为每个月具体天数的数组; 题目中要把日期转换成汉字的话,那肯定要定义一个值为笔画数的汉字数组。 定义一个方法判断闰平年–>{闰年:(year%400==0)||(year %4==0&&year%100!=0)} 定义两个变量,用于给汉字日期相加和满足条件的日期++。 三层循环(分别表示年月日),再在循环里定义8个变量(用于取日期上每一个数字)。 然后就是在if判断转换后的汉字日期总笔画数是否>50,满足就++ 最后就是加一个判断条件:当日期满足2024-4-13就输出并且return;

最后的if判断语句的结束语句为什么不用break;而是用return;?

因为break是结束当前循环(day的循环),return是终止当前方法的执行。它是终止solve()整个方法.

最终代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class Main {
    //    定义天数
    static int months[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    //   定义数字对应的笔画数
    static int hz[] = {13, 1, 2, 3, 5, 4, 4, 2, 2, 2};

    //    判断闰平年
    static boolean leaq(int year) {
        return (year % 400 == 0) || (year%4 == 0 && year % 100 != 0);
    }
    static void solve() {
        int sum = 0, cnt = 0;
        for (int year = 2000; year <= 2024; year++) {
            if (leaq(year)) {
                months[2] = 29;
            } else {
                months[2] = 28;
            }
            for (int month = 1; month <= 12; month++) {
                for (int day = 1; day <= months[month]; day++) {
                    int year_one, year_two, year_three, year_four;
                    int month_one, month_two;
                    int day_one, day_two;
                    year_one = year / 1000;
                    year_two = year / 100 % 10;
                    year_three = year / 10 % 10;
                    year_four = year % 10;
                    month_one = month / 10;
                    month_two = month % 10;
                    day_one = day / 10;
                    day_two = day % 10;
                    sum = hz[year_one] + hz[year_two] + hz[year_three] + hz[year_four] + hz[month_one] + hz[month_two] + hz[day_one] + hz[day_two];
                    if (sum > 50) {
                        cnt++;
                    }
                    if (year == 2024 && month == 4 && day == 13) {
                        System.out.println(cnt);
                        return;
                    }
                }
            }
        }

    }
    public static void main(String[] args) {
        solve();
    }
}

也可以不用写solve()方法,直接在main写也行。

本博客已稳定运行 0
发布了 9 篇文章 | 共 8.8K
Hugo 主题 Stack 由Jimmy设计
Chiba
...