蓝桥杯ACM决赛经典试题及其详解
蓝桥杯试题及答案

蓝桥杯试题及答案1. 单项选择题题目:以下哪个选项是Python语言中用于定义函数的关键字?A. classB. functionC. defD. method答案: C2. 多项选择题题目:以下哪些是数据结构中常见的排序算法?A. 快速排序B. 冒泡排序C. 选择排序D. 插入排序答案: A, B, C, D3. 判断题题目:在HTML中,`<p>`标签用于定义段落。
答案:正确4. 填空题题目:在Python中,使用______( )______关键字来创建一个空集合。
答案: set5. 简答题题目:解释什么是闭包,并给出一个Python中的闭包示例。
答案:闭包是一个函数对象,它引用了创建它的外部作用域中的变量。
闭包允许函数访问并操作外部作用域的变量。
示例:```pythondef outer_function(x):def inner_function(y):return x + yreturn inner_functionclosure = outer_function(2)print(closure(3)) # 输出结果为5```6. 编程题题目:编写一个函数,计算并返回斐波那契数列的第n项。
答案:```pythondef fibonacci(n):if n <= 0:return 0elif n == 1:return 1else:a, b = 0, 1for _ in range(2, n + 1):a, b = b, a + breturn b```7. 案例分析题题目:假设你正在开发一个电子商务网站,你需要设计一个购物车系统。
描述购物车系统应该包含哪些核心功能,并给出一个简单的数据结构设计。
答案:核心功能:- 添加商品到购物车- 从购物车中移除商品- 更新购物车中商品的数量- 计算购物车中商品的总价- 清空购物车数据结构设计:```pythonclass ShoppingCart:def __init__(self):self.items = {} # 商品ID映射到商品对象和数量def add_item(self, product_id, quantity):if product_id in self.items:self.items[product_id]['quantity'] += quantity else:self.items[product_id] = {'product':Product(product_id), 'quantity': quantity}def remove_item(self, product_id):if product_id in self.items:del self.items[product_id]def update_quantity(self, product_id, quantity):if product_id in self.items:self.items[product_id]['quantity'] = quantitydef calculate_total(self):total = 0for item in self.items.values():total += item['product'].price *item['quantity']return totaldef clear_cart(self):self.items = {}```8. 论述题题目:讨论在软件开发过程中,为什么需要进行代码审查?答案:代码审查是软件开发过程中一个重要的质量保证步骤。
第十一届蓝桥杯真题及答案

第十一届蓝桥杯C++省赛B组真题和题解试题A:门牌制作题目【问题描述】小蓝要为一条街的住户制作门牌号。
这条街一共有2020位住户,门牌号从1到2020编号。
小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。
请问要制作所有的1到2020号门牌,总共需要多少个字符2?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
题解答案:624#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <queue>#include <stack>#include <set>#include <cmath>#include <iostream>using namespace std;const int INF = 1e9;int cnt;void cal(int x){while(x){if(x % 10 == 2) cnt++;x /= 10;}}int main(){for(int i = 1; i <= 2020; i++){ cal(i);}cout << cnt;return 0;}试题B:既约分数题目【问题描述】如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。
例如,3/4,5/2,1/8,7/1都是既约分数。
请问,有多少个既约分数,分子和分母都是1到2020之间的整数(包括1和2020)?【答案提交】这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
2022年第五届蓝桥杯大赛软件类C-CC组全国总决赛真题

2022年第五届蓝桥杯大赛软件类C-CC组全国总决赛真题1.结果填空(满分10分)标题:国王的遗产某国是个小国。
国王K有6个儿子。
在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子。
其中,大儿子分1/4,二儿子1/5,三儿子1/6,....直到小儿子分1/9。
牛是活的,不能把一头牛切开分。
最后还剩下11头牛,分给管家。
请计算国王这批遗产中一共有多少头牛。
这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)2.结果填空(满分35分)标题:神奇6位数有一个6位的正整数,它有个很神奇的性质:分别用23456去乘它,得到的仍然是6位数,并且乘积中所包含的数字与这个6位数完全一样!只不过是它们的顺序重新排列了而已。
请计算出这个6位数。
这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)3.代码填空(满分25分)标题:日期差下面的程序计算了两个日期的差值,两个日期都使用公元纪年法。
第1/7页请分析程序逻辑,并推断划线部分缺失的代码。
intdiff(inty1,intm1,intd1,inty2,intm2,intd2){inta=to_day(y1, m1,d1);intb=to_day(y2,m2,d2);returnb-a;}intmain(){intn=diff(1864,12,31,1865,1,1);printf(\return0;}注意:通过浏览器提交答案。
只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)。
4.程序设计(满分50分)标题:拼接平方数小明发现49很有趣,首先,它是个平方数。
它可以拆分为4和9,拆分出来的部分也是平方数。
169也有这个性质,我们权且称它们为:拼接平方数。
第2/7页100可拆分100,这有点勉强,我们规定,000000等都不算平方数。
小明想:还有哪些数字是这样的呢?你的任务出现了:找到某个区间的所有拼接平方数。
2024十五届蓝桥省赛C++真题(附解析)

2024年第十五届蓝桥省赛中级组C++真题(附解析)一、选择题(选择题严禁使用程序验证,选择题不答或答错都不扣分)1、定义 char a[]="hello\nworld",执行 cout<<a,输出结果是( )A、helloworldB、 helloworldC、hellonworldD、hello\nworld解析:\n输出时会换行2、(11001010)2+(F8)16的结果是( )。
A、(11001010)2B、(701)8 C、(1C2)16 D、(452)10解析:(11001010)2值为202 (F8)16值为248 和为450,转为16进制为C、(1C2)163、表达式4%12 的结果是( )。
A、0B、4C、3 D、12解析:4%12 ,为求4除以12的余数,结果为44、下列选项中,逻辑表达式的值始终与 B的真假无关的是( )。
A、(!A || B) && AB、(A || B) && (!A && B)C、(A && !A)||BD、(A || B) && (A || !B)解析:D,如果A为真,该语句一定为真,如果A为假,不管B的值是否为真,该语句的值都为假,所以与B的真假无关5、运行下面程序,输出结果是()。
1.int a[6] = {16, 8, 32, 10, 9, 21};2.int func(int L, int R, int d) {3.if (L > R)4.return 0;5.int sum = 0, m = a[L], index = L;6.for (int i = L + 1; i <= R; i++) {7.if (m < a[i]) {8. m = a[i];9. index = i;10. }11. }12.int lt = func(L, index - 1, d + 1);13.int rt = func(index + 1, R, d + 1);14.return lt + rt + d * m;15.}16.int main() {17. cout << func(0, 5, 1);18.return 0;19.}A、196B、197C、198D、199解析:A ,当func 函数被调用时,它首先检查L 是否大于R,这是递归的基本情况。
第七届蓝桥杯省赛a组试题及答案

第七届蓝桥杯省赛a组试题及答案第七届蓝桥杯省赛A组试题及答案1. 选择题- 1.1 以下哪个选项是Java中的数据类型?A. BooleanB. StringC. IntegerD. All of the above- 答案:D- 1.2 在C++中,用于定义一个类的方法是什么关键字?A. classB. structC. functionD. method- 答案:A2. 填空题- 2.1 在Python中,用于定义函数的关键字是____。
- 答案:def- 2.2 在JavaScript中,用于声明变量的关键字是____。
- 答案:var3. 编程题- 3.1 编写一个函数,计算并返回从1到n的整数之和。
- 答案:```pythondef sum_n(n):return sum(range(1, n+1))```- 3.2 编写一个程序,实现一个简单的计算器,可以进行加、减、乘、除操作。
- 答案:```pythondef calculator(a, b, operation):if operation == '+':return a + belif operation == '-':return a - belif operation == '*':return a * belif operation == '/':return a / b if b != 0 else 'Error: Division by zero'```4. 简答题- 4.1 解释什么是面向对象编程(OOP)?- 答案:面向对象编程(OOP)是一种编程范式,它使用“对象”来设计应用程序和程序。
对象是现实世界中事物的抽象,它们具有属性(数据)和方法(功能)。
- 4.2 描述一下什么是递归函数?- 答案:递归函数是一个调用自身的函数,它允许函数在执行过程中调用自己。
第十四届蓝桥杯大赛省赛CC++大学A组

第十四届蓝桥杯大赛软件赛省赛C/C++大学A组【考生须知】考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题。
考试时间为4小时。
考试期间选手可浏览自己已经提交的答案,被浏览的答案允许拷贝。
时间截止后,将无法继续提交或浏览答案。
对同一题目,选手可多次提交答案,以最后一次提交的答案为准。
选手必须通过浏览器方式提交自己的答案。
选手在其它位置的作答或其它方式提交的答案无效。
试题包含“结果填空”和“程序设计”两种题型。
结果填空题:要求选手根据题目描述直接填写结果。
求解方式不限。
不要求源代码。
把结果填空的答案直接通过网页提交即可,不要书写多余的内容。
程序设计题:要求选手设计的程序对于给定的输入能给出正确的输出结果。
考生的程序只有能运行出正确结果才有机会得分。
注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。
选手的程序必须是通用的,不能只对试卷中给定的数据有效。
对于编程题目,要求选手给出的解答完全符合GNU C/C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。
代码中允许使用STL类库。
注意:main函数结束必须返回0。
注意:所有依赖的函数必须明确地在源文件中#include<xxx>,不能通过工程设置而省略常用头文件。
所有源码必须在同一文件中。
调试通过后,拷贝提交。
提交时,注意选择所期望的编译器类型。
第十四届蓝桥杯大赛软件赛省赛1试题A:幸运数本题总分:5分【问题描述】小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面一半的数位之和,则这个数是他的幸运数字。
例如2314是一个幸运数字,因为它有4个数位,并且2+3=1+4。
现在请你帮他计算从1至100000000之间共有多少个不同的幸运数字。
【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
2019第十届蓝桥杯省赛CC++大学B组试题+题解

2019第⼗届蓝桥杯省赛CC++⼤学B组试题+题解第⼗届蓝桥杯省赛C/C++⼤学B组试题+题解第⼗届蓝桥杯⼤赛软件类省赛C/C++ ⼤学 B 组考⽣须知考试开始后,选⼿⾸先下载题⽬,并使⽤考场现场公布的解压密码解压试 题。
考试时间为 4 ⼩时。
考试期间选⼿可浏览⾃⼰已经提交的答案,被浏览的 答案允许拷贝。
时间截⽌后,将⽆法继续提交或浏览答案。
对同⼀题⽬,选⼿可多次提交答案,以最后⼀次提交的答案为准。
选⼿必须通过浏览器⽅式提交⾃⼰的答案。
选⼿在其它位置的作答或其它 ⽅式提交的答案⽆效。
试题包含“结果填空”和“程序设计”两种题型。
结果填空题:要求选⼿根据题⽬描述直接填写结果。
求解⽅式不限。
不要 求源代码。
把结果填空的答案直接通过⽹页提交即可,不要书写多余的内容。
程序设计题:要求选⼿设计的程序对于给定的输⼊能给出正确的输出结果。
考⽣的程序只有能运⾏出正确结果才有机会得分。
注意:在评卷时使⽤的输⼊数据与试卷中给出的⽰例数据可能是不同的。
选⼿的程序必须是通⽤的,不能只对试卷中给定的数据有效。
对于编程题⽬,要求选⼿给出的解答完全符合 GNU C/C++ 标准,不能使 ⽤诸如绘图、Win32API、中断调⽤、硬件操作或与操作系统相关的 API。
代码中允许使⽤ STL 类库。
注意: main 函数结束必须返回 0注意: 所有依赖的函数必须明确地在源⽂件中 #include ,不能通过 ⼯程设置⽽省略常⽤头⽂件。
所有源码必须在同⼀⽂件中。
调试通过后,拷贝提交。
提交时,注意选择所期望的编译器类型。
试题 A: 组队本题总分:5 分作为篮球队教练,你需要从以下名单中选出 1 号位⾄ 5 号位各⼀名球员, 组成球队的⾸发阵容。
每位球员担任 1 号位⾄ 5 号位时的评分如下表所⽰。
请你计算⾸发阵容 1 号位⾄ 5 号位的评分之和最⼤可能是多少?【答案提交】这是⼀道结果填空的题,你只需要算出结果后提交即可。
本题的结果为⼀ 个整数,在提交答案时只填写这个整数,填写多余的内容将⽆法得分。
蓝桥杯题库及答案python版

蓝桥杯题库及答案python版这是一道结果填空的题,只需要算出一个整数作为结果提交即可。
input_str=input()num=len(input_str)searched=[]foriinra nge(num):forjinrange(num):ifstr(input_str[j:j+i:])noti nsearched:searched.append(str(input_str[j:j+i:]))print (len(searched))输出结果为:100(2)年号字串小明用字母 A 对应数字1,B 对应2,以此类推,用 Z 对应26。
对于27以上的数字,小明用两位或更长位的字符串来对应,例如AA 对应27,AB 对应28,AZ 对应52,LQ 对 329。
请问2019对应的字符串是什么?该题就是一个进制转换的问题,将十进制转换为26进制,因为是1~26,其中只有26个数,所以虽然是满27才进位,但应该是转26进制。
string='ABCDEFGHIJKLMNOPQRSTUVWXYZ'num=2019yu=[]whilen um>=26:yu.append(num%26)num=num//26yu.append(num)forii nyu[::-1]:print(string[i-1],end='')输出结果为:BYQ(3)数列求值【问题描述】给定数列 1, 1, 1, 3,5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。
求第项的最后 4 位数字。
【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个 4 位整数(提示:答案的千位不为0),在提交答案时只填写这个整数,填写多余的内容将无法得分。
arr=[0foriinrange()]arr[0]=arr[1]=arr[2]=1foriinrange( 3,):arr[i]=(arr[i-1]+arr[i-2]+arr[i-3])%10000#这个求余可以保证每一次计算只保留后四位(4个0)#但是不会影响数列的计算,因为数列的后几位都是由后面决定的,所以前面舍去也不会影响后几位的值print(arr[])输出为:4659(4)数的分解把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和4,一共有多少种不同的分解方法?注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18和 1001+1000+18 被视为同一种。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*入门训练A+B问题问题描述输入A、B,输出A+B。
说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。
输入格式输入的第一行包括两个整数,由空格分隔,分别表示A、B。
说明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式。
做题时你应该假设所给的输入是一定满足输入格式的要求的,所以你不需要对输入的格式进行检查。
多余的格式检查可能会适得其反,使用你的程序错误。
在测试的时候,系统会自动将输入数据输入到你的程序中,你不能给任何提示。
比如,你在输入的时候提示“请输入A、B”之类的话是不需要的,这些多余的输出会使得你的程序被判定为错误。
输出格式输出一行,包括一个整数,表示A+B的值。
说明:“输出格式”是要求你的程序在输出结果的时候必须满足的格式。
在输出时,你的程序必须满足这个格式的要求,不能少任何内容,也不能多任何内容。
如果你的内容和输出格式要求的不一样,你的程序会被判断为错误,包括你输出了提示信息、中间调试信息、计时或者统计的信息等。
样例输入12 45说明:“样例输入”给出了一组满足“输入格式”要求的输入的例子。
这里给出的输入只是可能用来测试你的程序的一个输入,在测试的时候,还会有更多的输入用来测试你的程序。
样例输出57说明:“样例输出”给出了一组满足“输出格式”要求的输出的例子。
样例输出中的结果是和样例输入中的是对应的,因此,你可以使用样例的输入输出简单的检查你的程序。
要特别指出的是,能够通过样例输入输出的程序并不一定是正确的程序,在测试的时候,会用很多组数据进行测试,而不局限于样例数据。
有可能一个程序通过了样例数据,但测试的时候仍只能得0分,可能因为这个程序只在一些类似样例的特例中正确,而不具有通用性,再测试更多数据时会出现错误。
比如,对于本题,如果你写一个程序不管输入是什么都输入57,则样例数据是对的,但是测试其他数据,哪怕输入是1和2,这个程序也输出57,则对于其他数据这个程序都不正确。
数据规模与约定-10000 <= A, B <= 10000。
说明:“数据规模与约定”中给出了试题中主要参数的范围。
这个范围对于解题非常重要,不同的数据范围会导致试题需要使用不同的解法来解决。
比如本题中给的A、B范围不大,可以使用整型(int)来保存,如果范围更大,超过int的范围,则要考虑其他方法来保存大数。
有一些范围在方便的时候是在“问题描述”中直接给的,所以在做题时不仅要看这个范围,还要注意问题描述。
*/#include <stdio.h>int main(){int A, B;scanf("%d%d", &A, &B);printf("%d", A+B);return 0;}/*//参考代码Javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;class Main{public static void main(String[] args) throws IOException{args = new BufferedReader(new InputStreamReader(System.in)).readLine().split("");System.out.println(Integer.parseInt(args[0])+Integer.parseInt(args[1]));}}*/【2】/*入门训练Fibonacci数列问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式输入包含一个整数n。
输出格式输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入10样例输出55样例输入22样例输出7704数据规模与约定1 <= n <= 1,000,000。
*/#include <stdio.h>main(){unsigned long s=0,f1=1,f2=1,f3=1,n=0;scanf("%d",&n);if(n>2)for(s=3;s<=n;s++){f3=(f2+f1)%10007;f1=f2;f2=f3;}printf("%d",f3);return 0;}/*//参考代码C语言#include <stdlib.h>#include <stdio.h>#define MOD 10007#define MAXN 1000001int n, i, F[MAXN];int main(){scanf("%d", &n);F[1] = 1;F[2] = 1;for (i = 3; i <= n; ++i)F[i] = (F[i-1] + F[i-2]) % MOD;printf("%d\n", F[n]);return 0;}//参考代码Java语言import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main {public static void main(String[] args) throws IOException{BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));String s=reader.readLine();int n=Integer.valueOf(s);int f1=1,f2=1,f3=0;if(n<3){System.out.print("1");return;}for(int i=3;i<=n;i++){if(f1>10007)f1=f1%10007;if(f2>10007)f2=f2%10007;f3=f1+f2;f1=f2;f2=f3;}System.out.print(f3%10007);}}*/【3】/*入门训练序列求和问题描述求1+2+3+...+n的值。
输入格式输入包括一个整数n。
输出格式输出一行,包括一个整数,表示1+2+3+...+n的值。
样例输入4样例输出10样例输入100说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。
一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低。
样例输出5050数据规模与约定1 <= n <= 1,000,000,000。
说明:请注意这里的数据规模。
本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时,这种“暴力”的方法往往会导致超时。
此时你需要想想其他方法。
你可以试一试,如果使用1000000000作为你的程序的输入,你的程序是不是能在规定的上面规定的时限内运行出来。
本题另一个要值得注意的地方是答案的大小不在你的语言默认的整型(int)范围内,如果使用整型来保存结果,会导致结果错误。
如果你使用C++或C语言而且准备使用printf输出结果,则你的格式字符串应该写成%I64d 以输出long long类型的整数。
*/#include<stdio.h>main(){long long n,s=0;scanf("%I64d",&n);if(n%2==0)s=(1+n)*n/2;elses=(1+n)*n/2+n/2;printf("%I64d",s);return 0;}/*//参考代码C语言#include <stdio.h>int main(){int n;long long ret = 0, tmp;scanf("%d", &n);tmp = n;printf("%I64d", (1+tmp) * tmp / 2);return 0;}//参考代码Java语言import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main {public static void main(String args[]) throws NumberFormatException, IOException{ BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));long i = Integer.parseInt(strin.readLine());long sum = (1+i)*i/2;System.out.println(sum);}}*/【4】/*入门训练圆的面积问题描述给定圆的半径r,求圆的面积。
输入格式输入包含一个整数r,表示圆的半径。
输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
说明:在本题中,输入是一个整数,但是输出是一个实数。
对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。
实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。
样例输入4样例输出50.2654825数据规模与约定1 <= r <= 10000。
提示本题对精度要求较高,请注意π的值应该取较精确的值。
你可以使用常量来表示π,比如PI=3.14159265358979323,也可以使用数学公式来求π,比如PI=atan(1.0)*4。
*/#include <stdio.h>#include <math.h>#define PI atan(1.0)*4main(){int r=0;double s=0;scanf("%d",&r);s=PI*r*r;printf("%.7f",s);return 0;}/*//参考代码C语言#include <stdio.h>#include <math.h>int main(){int r;double s, PI;scanf("%d", &r);PI = atan(1.0) * 4;s = PI * r * r;printf("%.7lf", s);return 0;}//参考代码Java语言import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.math.BigDecimal;70 71 public class Main {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedReader bf = new BufferedReader(new InputStreamReader(System.in));BigDecimal bg = new BigDecimal(bf.readLine());BigDecimal value = bg.multiply(bg.multiply(new BigDecimal(Math.PI))).setScale(7,BigDecimal.ROUND_HALF_UP);System.out.println(value);}}*/【5】/*基础练习闰年判断问题描述给定一个年份,判断这一年是不是闰年。