LC 1185. 一周中的第几天

2023-12-30 15:28
文章标签 第几天 lc 1185

本文主要是介绍LC 1185. 一周中的第几天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1185. 一周中的第几天

难度 :简单

题目大意:

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:daymonthyear,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}

给出的日期一定是在 19712100 年之间的有效日期

分析

题目没有给出一个标准,所以我们可以以当前时间为基准(2023, 12, 30,星期六),但是为了处理方便,我们可以利用leetcode上的测评特性(会直接给出答案),随便给一个返回值,测出1971,1,1的日期,也就是星期五,那么我们只需要知道给定的日期和这个基准时间查了多少就知道那天是星期几了,情况还是挺多的,一个一个分类来讨论,一步一步优化即可

模拟

分类讨论

代码实现

class Solution {
public:string week[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday",};int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool isLeap(int year) {if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) return true;return false;}string dayOfTheWeek(int day, int month, int year) {int now = 4; //星期5int d = day - 1;month --;while (month) {if (isLeap(year) && month == 2)  d += 1; d += days[month-- - 1];}year --;while (year >= 1971)  {if (isLeap(year--)) d += 366;else d += 365;}return week[(now + d) % 7];}
};

巧法

我们可以利用库中自带的结构体struct tm中的int tm_wday

struct tm {int tm_sec;       /* 秒 – 取值区间为[0,59] */int tm_min;       /* 分 - 取值区间为[0,59] */int tm_hour;      /* 时 - 取值区间为[0,23] */int tm_mday;      /* 一个月中的日期 - 取值区间为[1,31] */int tm_mon;       /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */int tm_year;      /* 年份,其值等于实际年份减去1900 */int tm_wday;      /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */int tm_yday;      /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */int tm_isdst;     /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况  时,tm_isdst()为负。*/
};

C 库函数 time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数,发生错误时返回-1

C 库函数 struct tm localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示。

代码实现

class Solution {const string weekdays[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
public:string dayOfTheWeek(int day, int month, int year) {struct tm ti = {0, 0, 0, day, month - 1, year - 1900};time_t t = mktime(&ti);return weekdays[localtime(&t)->tm_wday];}
};

时间复杂度: O ( 1 ) O(1) O(1)

结束了

这篇关于LC 1185. 一周中的第几天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

从实验室到应用:LC-MS/MS技术与AbMole化合物共舞,揭开半胱氨酸靶向共价抑制剂的新篇章

在生物化学的广阔舞台上,共价抑制剂作为一类特殊的分子“捕手”,它们通过形成稳定的共价键精准捕获目标蛋白的半胱氨酸残基,从而调节其功能。近期,一项由澳门科技大学、暨南大学和中国科学院神经科学研究所携手完成的研究,利用先进的LC-MS/MS技术,结合AbMole BioScience Inc提供的高品质化合物,成功筛选出多种潜在的半胱氨酸靶向共价抑制剂,为科学界带来了一场激动人心的发现之旅。 共价抑

LC开源电路的学习(一)

TI的升压芯片,电压虽然能升高,但是带来的问题就是最大电流大幅降低: CC1和CC2芯片接快充芯片之后,直接接到单片机的下载口: 这个有点意思,用导线换电阻: 、 PD快充芯片CH224K需要连接typeC的DP DN引脚,但是我想用这两个引脚接ch340给单片机下载程序怎么弄:

Calendar 获得当前日期是这一年的第几天

本文来源于:http://www.iteye.com/problems/40920 0 calendar 日历字段区别10 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");     Calendar cal1=Calendar.getInstance();            cal1.se

HIHO #1185 : 连通性·三

题目链接 先使用tarjan算法,计算强连通分量,进行缩点成DAG,然后在使用拓扑排序计算 tarjan中,我们只需要从1号节点计算,因为开始时在1号点。 建立新图的过程中,1号点不能到达的点也不用建立到新图里面 #include<bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#defin

Python小练习:输入某年某月某日,判断这一天是这一年的第几天?

题目:输入某年某月某日,判断这一天是这一年的第几天? def date_days(): try:year = int(input("请输入年份:"))mon = int(input("请输入年份:"))date = int(input("请输入年份:"))except:print("输入数值类型,谢谢")date_dict_ping = {1: 31, 2: 28, 3: 31, 4: 3

XTU 1185 Bob's Problem

Bob's Problem Accepted : 53 Submit : 356Time Limit : 1000 MS Memory Limit : 65536 KB 题目描述 Bob今天碰到一个问题,他想知道x3+y3 = c 是否存在正整数解? 输入 第一行是一个整数K(K≤20000),表示样例的个数。 以后每行一个整数c(2≤c≤109) 输出 每行输出一个样例的结果,

【LC刷题】DAY15:654 617 700 98

【LC刷题】DAY15:654 617 700 98 文章目录 【LC刷题】DAY15:654 617 700 98654. 最大二叉树 [link](https://leetcode.cn/problems/maximum-binary-tree/description/)617. 合并二叉树 [link](https://leetcode.cn/problems/merge-two-b

python-今年第几天

[题目描述] 定义一个结构体变量(包括年、月、日)。 计算该日在本年中是第几天,注意闰年问题。输入格式: 年   月   日。输出格式: 当年第几天。样例输入 2000 12 31样例输出 366 数据范围 对于100%的数据,保证日期合法 。来源/分类(难度系数:一星) 完整代码展示: a,b,c=map(int,input().split()) d=[31,29,31,30,31,30,31

仿中波本振电路的LC振荡器电路实验

手里正好有一套中波收音机套件的中周。用它来测试一下LC振荡器,电路如下: 用的是两只中频放大的中周,初步测试是用的中周自带的瓷管电容,他们应该都是谐振在465k附近。后续测试再更换电容测试。 静态电流,0.5到1mA。下面记录下测试的一些情况: 1. 起振幅度小,如果0-300M看频谱,在50M后面会出现拱起,所以这个实际电路需要抑制这些信号。当然我用的是面包板,可能跟面包板的分布参数有

LANG、LC_MESSAGES和LC_ALL

在Linux系统中,环境变量LANG、LC_MESSAGES和LC_ALL用于控制系统和应用程序的语言和区域设置(locale)。它们的具体作用如下: LANG:         LANG是最基本的环境变量,用于指定系统的默认语言和区域设置。它是一个全局变量,当其他更具体的区域变量(如LC_MESSAGES)未设置时,系统会使用LANG的值。         例如:expor