华为机试HJ73-计算日期到天数转换
HJ73 计算日期到天数转换
题目描述:
描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) ,空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
示例1
输入:
2012 12 31
输出:
366
示例2
输入:
1982 3 4
输出:
63
解题思路
要求出日期在当前年份的第几天,首先我们要知道月份有大小月之分,年份也有平年和闰年的区分,我们需要根据输入的数据去判断然后求和。
知识点:闰年规则-维基百科
閏年是指該年有366日,即較平常年份多出一日
目前使用的格里高利曆闰年规则如下(这里的公元为公元后年份,公元前置润规则参见后续章节)[1]:
計算格里高利曆年份是平年還是閏年
1、公元年分非4的倍數,為平年。
2、公元年分為4的倍數但非100的倍數,为闰年。
3、公元年分為100的倍數但非400的倍數,为平年。
4、公元年分為400的倍數為閏年。
每逢閏年,2月份有29日,平年的2月份為28日。
因此,1979年、2018年、2021年為平年,1980年、2020年逢4的倍数為閏年,1900年逢100的倍数但非400的倍數故為平年。2000年逢400的倍数又為閏年。
因此,需要根据输入年份判断当前日期是否为闰年还是平年,若为闰年,则2月份有29天,否则为平年则2月份只有28天;
其次,当月份大于2时需要判断当前年份是平年还是闰年,若为闰年则2月份需要加上29天,否则2月份加上28天。
可以用一个数组保存12个月的天数,1,3,5,7,8,10,12月有31天,4,6,9,11有30天,2月份则比较特殊,闰年有29天,平年有28天。
C++实现代码:
#include <iostream>
using namespace std;bool isLeapYear(int year)
{if((year%400==0||(year%4==0&&year%100!=0))) {return true;}return false;
}int main()
{int year,month,day;// 每个月的天数,[1,3,5,7,8,10,12]月为31天,2月份可能为28(平年)或29天(闰年),[4,6,9,11]为30天int daysOfMonth[]={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};while(cin >> year >> month >> day){int sum = 0;for(int i = 0; i< month-1; i++){sum=sum+daysOfMonth[i];}// 如果是闰年并且月份大于2,则在sum基础上多加1,再加上日数if(isLeapYear(year) && month>2) {sum=sum+1+day;} else { sum=sum+day;}cout<<sum<<endl;}return 0;
}
华为机试HJ73-计算日期到天数转换相关推荐
- 【Java版oj】day14计算日期到天数转换、幸运的袋子
目录 一.计算日期到天数转换 (1)原题再现 (2)问题分析 (3)完整代码 二.幸运的袋子 (1)原题再现 (2)问题分析 (3)完整代码 一.计算日期到天数转换 (1)原题再现 计算日期到天数转换 ...
- 华为机试HJ73:计算日期到天数转换
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 根据输入的日期,计算是这一年的第几天. 输入描述: 输入一行,每行空格分割,分别是年 ...
- 2014华为机试,计算给定和牌麻将的番数
一.题目如下 二.题目分析 麻将和牌有两种形式,即: 模式1 :11,11,11,11,11,11,11 模式2: 11,123,123,123,123(全部或者部分123可以被111,1111替代) ...
- 华为机试-8.计算面积(绘图机器的绘图笔初始位置在原点)
[计算面积] 绘图机器的绘图笔初始位i在原点(0.0). 机器启动后其绘图笔按下面规则绘制直线: 1 )尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E, 2 )期间可通过指令在纵坐标轴方向进行偏移 ...
- 华为机试:计算最大乘积
题目描述 题目解析 考察字符串操作 #include<bits/stdc++.h> using namespace std;std::vector<std::string> s ...
- 牛客网刷题—— 计算日期到天数转换
目录 一.描述 输入描述: 输出描述: 二.思路: 三.代码实现 点击下方链接开始做本题: 开始做题 一.描述 根据输入的日期,计算是这一年的第几天. 保证年份为4位数且日期合法. 进阶:时间复杂度: ...
- Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题
接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题 HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...
- 华为机试108题(C 语言解答)
Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...
- 【HUAWEI】华为机试试题-105
LeeCode试题链接直接上 HJ1 字符串最后一个单词的长度 HJ2 计算某字符出现次数 HJ3 明明的随机数:随机数去重排序输出(小-大) HJ4 字符串分隔:输入一个字符串,请按长度为8拆分每个 ...
最新文章
- ArduinoYun教程之通过网络为Arduino Yun编程
- java中上传文件有哪些框架,Spring MVC系列教材 (八)- SPRING MVC 上传文件
- 粗读《构建之法》后的思考和收获
- 前端学习(2672): vue3.0脚手架路由改变
- 【转载】送到榨油厂的飞鸽传书
- Gradle 2.3 发布
- webapi 路由限制命名控件_什么是命名数据网络NDN?
- gzp解压命令 linux_Linux-压缩解压命令(gzip,zip,tar,bzip)
- php中ini set,php ini_set函数的用法
- C++---vector与list之间的区别
- captap生成验证码
- Java中的可变参数使用
- cpld的入门交流之三:JED to ABL 反编译方法
- Java实现抓取百度识图结果的实现和思路-3-实现断点传输
- scratch飞翔的小猫 电子学会图形化编程scratch等级考试一级真题和答案解析2022年3月
- Windows c# 生成验证码图片
- kali linux 入门(1) 基于win10和docker的环境搭建
- workflow bulider 官网下载路径
- java 控制台scanner的中文输入问题
- 玩转RT-Thread系列教程(6)--移植STemwin
热门文章
- duo是什么意思_为什么说陈奕迅的《浮夸》可能是一首细思极恐的粤语歌?
- 文艺码农~手把手教你如何绘制一辆会跑车
- 币氪研报|VET(VeChain)
- ICRA2017三篇论文泛读
- Mysql高13位ISBN转9位_C#ISBN10位编号转换13位
- 02用d编程写与写行类型
- 微软什么时候停止对win7进行服务器,微软官方通告:2020年1月24日起停止对windows7的技术支持...
- 7-2 计算职工工资 (10分)
- win2008 64位系统 C#实现发送邮件(ASP.NET)
- 手机wap网站建设的方法和技巧