首页 > 其他分享 >DreamJudge-1011-日期

DreamJudge-1011-日期

时间:2024-06-10 22:34:42浏览次数:13  
标签:cur int 31 30 DreamJudge 日期 base 1011

1.题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

今天是2012年4月12日星期四,编写程序,输入今天开始到12月31日之间的任意日期,输出那一天是星期几。例如输入“5(回车)20(回车)”(5月20日),输出应为“Sunday”。

输入输出格式

输入描述:

输入第一行为月份。
输入第二行为这个月的第几天。

输出描述:

输入这一天是星期几。
输入输出样例

输入样例#:

5
20

输出样例#:

Sunday

题目来源

贵州大学机试题

2.题解

2.1 打表 + 日期计算

思路

1.对于每月可能的日期 和 星期数 均进行打表操作,后续便于操作;
2.两个日期之间差的天数计算: diff_d = f[4] - base_d - (f[cur_m] - cur_d);
我是这样思考的,如果是类似4.12 -> 6.08 这样的日期:
我们选择忽略计算四月份的剩余日期(后面i = 1开始计算的),将这段日期补到五月份中;
f[4] - base_d 相当于四月份多的日期, f[cur_m] - cur_d 相当于当前月缺少的日期(我们f[]计算的是整月一共有的总日期数31,30,29,28这种)
如果能补全,这个结果相当于就是正的;反之为负数,这样就将这些零碎日期计算完毕,之后为计算结果进行补缺!

计算出 diff_d = 30 - 12 - (30 - 8) = -4;
然后开始使用循环,将5月和6月的日期均计算进去, diff_d = -4 + 31 + 30 = 57 天,这样就计算出了两段日期差

  1. 计算具体星期数,这个比较简单,直接使用 weeks[(base_week + diff_d) % 7] 中 % 即可完美解决循环问题!

  2. 且这样计算拓展性较好,如果具体起始日期不是4.12,只要更新base_m和base_d即可

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	vector<int> f{0,31,28,31,30,31,30,31,31,30,31,30,31};
	vector<string> weeks{"Sunday", "Monday", "TuesDay", "Wednesday", "Thursday", "Friday", "Saturday"};
	int base_m = 4, base_d = 12;
	int base_week = 4;
	int cur_m, cur_d;
	cin >> cur_m >> cur_d;
	
	int diff_m = cur_m - base_m;
	int diff_d = f[base_m] - base_d - (f[cur_m] - cur_d);	
	for(int i = 1; i <= diff_m; i++){
		diff_d += f[base_m + i];
	}
	
	string weekday = weeks[(base_week + diff_d) % 7];
	cout << weekday;
	return 0;
}

标签:cur,int,31,30,DreamJudge,日期,base,1011
From: https://www.cnblogs.com/trmbh12/p/18241115

相关文章

  • 【python】时间和日期
    1.datetime模块概述Python的datetime模块提供了用于处理日期和时间的类和函数。主要类包括datetime、date、time、timedelta和tzinfo(与时区有关)。2.主要类及其功能2.1datetime类datetime类是最常用的类之一,它表示一个具体的日期和时间(年、月、日、时、分、秒、微秒)。......
  • 1164. 指定日期的产品价格
    1164.指定日期的产品价格题目链接:1164.指定日期的产品价格代码如下:#WriteyourMySQLquerystatementbelowselectp1.product_id,ifnull(new_price,10)aspricefrom(selectdistinctproduct_idfromProducts)asp1--所有的产品leftjoi......
  • 【JAVASE】日期与时间类(上)
    一:概述从JAVASE8开始提供了java.time包,该包中有专门处理日期和时间的类。LocalDate  LocalDateTime  和LocalTime类的对象封装和日期、时间有关的数据,这三个类都是final类,而且不提供修改数据的方法,即这些类的对象的实体不可再发生变化,属于不可变对象。二:LocalDat......
  • 【C++修行之道】类和对象(五)日期类的实现、const成员、取地址及const和取地址操作符重
    目录一、日期类的实现Date.h 1.1GetMonthDay函数(获取某年某月的天数) 问:这个函数为什么不和其他的函数一样放在Date.cpp文件中实现呢?1.2CheckDate函数(检查日期有效性)、Print函数(打印日期)1.3实现日期类的逻辑运算符重载<运算符的重载 ==运算符重载其他运算符重载......
  • 将 CTE 字符串中的日期转换为 DateTime 对象并转换为 UTC
    我有一个包含CTE格式日期时间的字符串,我想将其转换为日期时间对象,然后获取UTC格式的日期时间。我尝试了下面的代码,它完成了转换。但问题是在昼夜节律变化前后,由于时间变化,它认为时间无效。DateTime.TryParseExact(myDate,"yyyyMMdd",CultureInfo.InvariantCu......
  • IntelliJ IDEA配置创建文件后自动生成注释字段,包括作者、日期和描述等信息。
    效果新建文件自动生成如下文档注释配置如下:打开setting进行如下操作粘贴的模板内容如下:/***@authordeveloper_ZhangXinHua*@date${YEAR}/${MONTH}/${DAY}*@desc${DESCRIPTION}*/......
  • 倒计时:日期对象.getTime();获取当前时间戳
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <title>Document</title></head><body> <h1></h1> <scripttype="text/javascript"> //现在到202......
  • CSP历年复赛题-P2010 [NOIP2016 普及组] 回文日期
    原题链接:https://www.luogu.com.cn/problem/P2010题意解读:计算两个日期之间有多少个日期是回文。解题思路:如果通过枚举两个日期之间的所有日期,然后判断回文,则会有几个问题:枚举数据规模在10^7级别,再加上对于日期加一天、判断回文等处理,有可能超时,而且对日期进行加一天、判断回......
  • 【Web API DOM10】日期(时间)对象
    一:实例化1获取系统当前时间即创建日期对象constdate=newDate()console.log(date)2024年6月5日周三 2获取指定的时间以获取2025年6月29日为例constdate=newDate('2025-6-29')console.log(date)二:日期对象方法1使用场景:日期对象返回数据如上图,无法直接使......
  • 存储引擎及特点、约束条件、严格模式、基本字段类型(整型、浮点型、字符串、日期时间
    【一】存储引擎在平常我们处理的文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制针对不同的数据应该有对应不同的处理机制存储引擎就是不同的处理机制。#查看所有引擎showengines;四种主要的存储引擎(1)Innodb引擎是MySQL5.5版本之后的默认存......