倪文迪陪你学蓝桥杯2021寒假每日一题:1.14日(2018省赛A组第2题)

2021年寒假每日一题,2017~2019年的省赛真题。
本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供。
后面的每日一题,每题发一个新博文,请大家每天博客蓝桥杯专栏: https://blog.csdn.net/weixin_43914593/category_10721247.html

每一题提供C++、Java、Python三种语言的代码。

2018省赛A组第2题“星期一”,题目链接:
http://oj.ecustacm.cn/problem.php?id=1360

1、题目描述


整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?


2、题解

  填空题,送分题。
  倪文迪说:“算一下题目要求中一共的天数,再翻翻日历看2000年12月31日是周日,根据总天数sum除以7和mod7的结果加以判断即可。”
  罗老师再次无话可说。
  还是说一句废话:电脑桌面右下角点击日期,可以查星期几,时间范围是100年,就是1921-2021年。

2.1 excel

  很多老师和同学说,如果电脑上有excel,就用它算好了。
  一个格子输入日期1901年1月1日,另一个格子输入2000年12月31日,然后两个格子相减得36524天,除以7得5217.7周。
  再用excel看2000年12月31日是星期日,说明答案就是5217。

3、C++代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int sum = 0;
	for(int i = 1901 ; i <= 2000 ; i++){
    
    
		if((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) //计算闰年
			sum += 366;
		else
            sum += 365;
	}
  //cout << sum % 7 << endl; // 6  看看余数,是不是包括了周一。2000年12.31日是周日
	cout << sum / 7 << endl; // 5217

	return 0;
}

4、Java代码

public class Main {
    
     
    public static void main(String[] args) {
    
    
        int sum = 0;
        for (int i = 1901; i <=2000; i++) {
    
    
            if ((i%4==0 && i%100!=0) || i%400==0)
                sum += 366;
            else 
                sum += 365;             
        }
        System.out.println(sum/7); 
    } 
}

5、Python代码

  Python大法好!

sum = 0
for i in range(1901,2001):
    if (i%4==0 and i%100!=0) or (i%400==0):
        sum += 366
    else:
        sum += 365
#print(sum % 7) #看看余数
print(sum//7)

  然而,罗老师刚翻了Python教材,发现前面都做了无用功。直接硬上:

from datetime import *
dt1 = datetime(1901,1,1)
dt2 = datetime(2000,12,31)
td = dt2- dt1
print(td.days//7)

猜你喜欢

转载自blog.csdn.net/weixin_43914593/article/details/112555227