寒假每日一题十三号星期五(个人练习)详细题解+推导证明(第十三天)
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 饰)带领下,飞往全美各地,展开一场场缉凶行动。
很棒!!!
以上是关于寒假每日一题十三号星期五(个人练习)详细题解+推导证明(第十三天)的主要内容,如果未能解决你的问题,请参考以下文章
寒假每日一题找硬币(个人练习)详细题解+推导证明(第十二天)
寒假每日一题回文平方(个人练习)详细题解+推导证明(第五天)