寒假每日一题十三号星期五(个人练习)详细题解+推导证明(第十三天)

Posted 我是管小亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寒假每日一题十三号星期五(个人练习)详细题解+推导证明(第十三天)相关的知识,希望对你有一定的参考价值。

文章目录

前言

这一周的题,真的是很扎实的基础题。

今天的题目是来自usaco training 1.2。

最近在家呆的有时候会有一点焦虑。

题目

十三号星期五真的很不常见吗?

每个月的十三号是星期五的频率是否比一周中的其他几天低?

请编写一个程序,计算 N 年内每个月的 13 号是星期日,星期一,星期二,星期三,星期四,星期五和星期六的频率。

测试的时间段将会开始于 1900 年 1 月 1 日,结束于 1900+N−1 年 12 月 31日。

一些有助于你解题的额外信息:

1900 年 1 月 1 日是星期一。
在一年中,4 月、6 月、9 月、11 月每个月 30 天,2 月平年 28 天,闰年 29 天,其他月份每个月31天。
公历年份是 4 的倍数且不是 100 的倍数的年份为闰年,例如 1992 年是闰年,1990 年不是闰年。
公历年份是整百数并且是 400 的倍数的也是闰年,例如1700年,1800年,1900年,2100年不是闰年,2000年是闰年。
输入格式
共一行,包含一个整数 N。

输出格式
共一行,包含七个整数,整数之间用一个空格隔开,依次表示星期六,星期日,星期一,星期二,星期三,星期四,星期五在十三号出现的次数。

数据范围
1≤N≤400

输入样例:
20
输出样例:
36 33 34 33 35 35 34

详细题解

写法1 O ( n ) O(n) O(n)

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int months[13] = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31;
int weekdays[7];

int main()

    int n;
    cin >> n;
    
    int days = 0;
    for (int y = 1900; y < 1900 + n; ++ y )
    
        for (int m = 1; m <= 12; ++ m )
        
            weekdays[(days + 12) % 7] ++;
            days += months[m];
            if (m == 2)
                if ((y % 100 && y % 4 == 0) || (y % 400 == 0))
                    ++ days;
        
    
    
    for (int i = 5, j = 0; j < 7; i = (i + 1) % 7, ++ j )
        cout << weekdays[i] << " ";
    cout << endl;
    
    return 0;

毫无疑问,这是一个枚举的题,需要注意的是闰年啥的。

最后提交,AC😁

推导证明

首先需要注意的是,十三号,即不是从月初一号开始算的;

其次需要注意的是,闰年的二月份是29天,但是闰年的条件需要注意;

最后需要注意的是,输出的顺序是从周五开始的。

举一反三

掌握两种方法的互相优化,如果面试官需要更低的时间复杂度,那么可以使用空间复杂度去置换,如果面试官需要更低的空间复杂度,或者不需要额外的空间复杂度,那么使用双指针。

总结

继续努力,坚持更新,13th打卡。

推荐一个神剧,犯罪心理


犯罪心理研究小组隶属FBI,他们跨州行动,主要针对连环杀人案,从嫌疑人的犯罪心理和行为模式入手建立人物侧写,圈定罪犯的性别、年龄、职业特征、居住环境乃至成长经历,从而预测罪犯下一步行为,直至缉拿罪犯。他们的成员包括:高智商、强记忆力的少年天才斯拜瑟尔·瑞德博士(马修·格雷·古柏勒 Matthew Gray Gubler 饰)——负责数据和资料分析;外冷内热的硬汉阿伦·哈奇(托马斯·吉布森 Thomas Gibson 饰)——沟通能力极强,波多黎各小伙德里克·摩根(谢默·摩尔 Shemar Moore 饰)——强制性犯罪行为专家;打扮招摇的小胖妹佩妮洛普·格西娅(克里斯汀·范奈丝 Kirsten Vangsness 饰)——数据库专家,美女媒体联络员JJ(A·J·库克 A.J. Cook 饰)等,在老探员戴维·罗西(乔·曼特纳 Joe Mantegna 饰)带领下,飞往全美各地,展开一场场缉凶行动。

很棒!!!

以上是关于寒假每日一题十三号星期五(个人练习)详细题解+推导证明(第十三天)的主要内容,如果未能解决你的问题,请参考以下文章

寒假每日一题找硬币(个人练习)详细题解+推导证明(第十二天)

寒假每日一题剪绳子(个人练习)详细题解+推导证明(第六天)

寒假每日一题回文平方(个人练习)详细题解+推导证明(第五天)

寒假每日一题红与黑(个人练习)详细题解+推导证明(第四天)

寒假每日一题数字三角形(个人练习)详细题解+推导证明(第二天)

寒假每日一题翻硬币(个人练习)详细题解+推导证明(第十一天)