今日算法:蓝桥杯基础题之“星期一”

2024-09-02 13:12

本文主要是介绍今日算法:蓝桥杯基础题之“星期一”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注!

今日算法第 5 题,你知道 20 世纪有多少个"星期一"吗?一起看看吧。

问题描述

整个 20 世纪(1901 年 1 月 1 日至 2000 年 12 月 31 日之间),一共有多少个星期一?请使用 JavaScript 编写一个函数来计算这个数字。

解题思路(一)

要解决这个问题,我们需要遍历整个 20 世纪的所有日期,并检查每个日期是否是星期一。我们可以使用 JavaScript 的 Date 对象来实现这一点。具体步骤如下:

  1. 创建一个 Date 对象,表示 1901 年 1 月 1 日。
  2. 使用一个循环遍历从 1901 年 1 月 1 日到 2000 年 12 月 31 日的所有日期。
  3. 在每次循环中,检查当前日期是否是星期一(即 getDay() 方法返回 1)。
function countMondays(startYear, endYear) {let count = 0;const startDate = new Date(startYear, 0, 1); // 1月1日,注意月份是从0开始的const endDate = new Date(endYear + 1, 0, 1); // 下个世纪的开始,不包含在内let currentDate = new Date(startDate);while (currentDate < endDate) {if (currentDate.getDay() === 1) {// 0是星期日,1是星期一count++;}currentDate.setDate(currentDate.getDate() + 1); // 移动到下一天}return count;
}// 计算20世纪(1901~2000)的星期一数量
const mondays = countMondays(1901, 2000);
console.log(mondays); // 输出结果

解题思路(二)

第一种解题思路需要遍历至少 365 * 100 = 36500 次,效率较低。我们可以先计算出第一天是否是星期一,如果不是,找到临近的下一个星期一,每隔 7 天加一次数据,这样可以让遍历次数减少 6/7= 85%以上。

function countMondays(startYear, endYear) {// 定义开始和结束日期const startDate = new Date(startYear, 0, 1); // 1月1日,注意月份是从0开始的const endDate = new Date(endYear + 1, 0, 1); // 下个世纪的开始,不包含在内// 计算起始日期是星期几(getDay() 返回0-6,其中0代码星期日,1代表星期一)let weekDayOfStart = startDate.getDay();// 如果起始日期不是星期一,则找到下一个星期一if (weekDayOfStart !== 1) {startDate.setDate(startDate.getDate() + ((1 - weekDayOfStart + 7) % 7));}// 初始化计数器let count = 0;// 遍历从下一个星期一开始到结束日期的所有日期while (startDate < endDate) {count++;startDate.setDate(startDate.getDate() + 7); // 每次增加7天,即一周}return count;
}const mondays = countMondays(1901, 2000);
console.log(mondays);

总结

通过上述两种方法,我们可以计算出 20 世纪(1901 年 1 月 1 日至 2000 年 12 月 31 日之间)的星期一数量是 5217,你算对了吗?第一种方法直接遍历所有日期,效率较低;第二种方法通过找到起始日期的下一个星期一,并每隔 7 天计数,效率更高。

好了,分享结束,谢谢点赞,下期再见。

这篇关于今日算法:蓝桥杯基础题之“星期一”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130054

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还