共48道题,当前是第31

初赛真题

01 #include<iost ream>
02 #include<cstdio>
03 using namespace std;
04 int daytab [2][13] = {
05     {0, 31, 28, 31, 30,31, 30,31, 31, 30,31, 30,31 },
06     {0, 31, 29,31, 30,31, 30,31, 31, 30,31, 30,31 }
07 };
08 bool IsLeapYear(int year) {
09     return (year % 4 ==0 && year % 100 != 0) || (year % 400 == 0);
10 }
11 int main() {
12     int year, month, day;
13     scanf("%d %d %d", &year, &month, &day);
14     int number = 0;
15     int row = IsLeapYear(year);
16     for(int j = 0; j < month; ++j){
17         number += daytab[row][j];
18     }
19     number += day;
20     printf("%d\n", number);
21     return 0;
22 }

1. B。输入 $12$ 也不会越界。
2. A。该程序的功能是输入年月日,输出这是输入年份的第几天,$2000$ 是闰年,$1900$ 年不是闰年,所以 $2000$ 年的 $3$ 月 $1$ 日和 $1990$ 年的 $3$ 月 $2$ 日的输出结果是相同的。
3. B。修改后判断闰年就出错了。
4. A。四条语句的逻辑判断正好为闰年的判断。
5. B。$1990$ 年 $9$ 月 $20$ 日是这一年的第 $263$ 天。
6. A。$2000$ 年 $5$ 月 $1$ 日是这一年的第 $122$ 天。

Question

1. 输入的三个数中,第二个数应是 [0, 11] 上的整数,否则会出现数组越界的问题。()

2. 输入 1900 3 2 和输入 2000 3 1 ,输出结果是相同的。()

3. 将第 9 行改成 return (year - 2000) % 4 == 0 ,其他地方不做改动,对程序最终的输出结果没有影响。()

4. 将第 9 行改成如下四行语句:
if(year % 400 == 0) return 1;
if(year % 100 == 0) return 0;
if(year % 4 == 0) return 1;
return 0;
其他地方不做改动,对程序最终的输出结果没有影响。()

5. 若输入的三个数为 1990 9 20,则输出为( )

6. 若输入的三个数为 2000 5 1,则输出为( )